有个需求是从Activity传参到navigation的第一个Fragment中。在navigation中fragment与fragment之间的传参很简单,但是从Activity传到navigation的fragment貌似有些不一样。。。
我项目中的startDestination是PasswordFragment。PhoneLoginActivity是navigation所依附的Activity。这里要实现PhoneLoginActivity传递参数到fragment
- 在nav_graph(这是我项目中的文件名)中的PasswordFragment所在节点下添加Argument
<fragment
android:id="@+id/passwordFragment"
......
tools:layout="@layout/fragment_password">
......
<!-- 需要的参数声明 -->
<argument
android:defaultValue="false"
android:name="loginUseEmail"
app:argType="boolean"/>
</fragment>
- 在PhoneLoginActivity的onStart方法里,这里PasswordFragment是navigation的第一个Fragment
override fun onStart() {
super.onStart()
//将参数传递给Navigation的startDestination
val args = PasswordFragmentArgs(loginUseEmail)
val controller = Navigation.findNavController(this, R.id.nav_host_fragment)
controller.setGraph(R.navigation.login_nav_graph,args.toBundle())
}
- 最后再PasswordFragment中拿到参数
private val args: PasswordFragmentArgs by navArgs()
......
val loginUseEmail = args.loginUseEmail