导航组件:将safeArgs从活动传递到片段

时间:2018-12-11 20:04:56

标签: android navigation android-architecture-components android-jetpack

我有两个图,所以第一个图从一个片段移动到一个活动,将safeArgs传递给该活动。

val action = MyFragmentDirections.actionMyActivity(arg1, arg2)
Navigation.findNavController(view).navigate(action)  

现在,在第二篇文章中,我想将这些参数从MyActivity传递到属于此活动的片段。

我可以得到参数:

val args = MyActivity.fromBundle(intent.extras)

问题在于此活动没有Directions文件,因此我无法传递参数。

3 个答案:

答案 0 :(得分:5)

Navigation 1.0.0-alpha07修复了feature request,用于将参数传递到图形的起始目标。

要使用此功能,您需要:

  1. 从您的app:navGraph中删除NavHostFragment属性
  2. 致电findNavController(R.id.your_nav_host_fragment).setGraph(R.navigation.your_graph, intent.extras)

使用您之前在R.id标记中拥有的NavHostFragmentR.navigation中的app:navGraph。通过将参数传递到setGraph调用中,您的起始目标将直接获取参数,而无需再次调用navigate(默认情况下,它将在您的后堆栈上创建目标的新实例-而不是您想要的)。

答案 1 :(得分:0)

我不知道是否建议这样做,但是它可以正常工作:

val args = MyActivity.fromBundle(intent.extras)
navController.navigate(R.id.myActivityFragment, args.toBundle())

答案 2 :(得分:0)

导航组件添加到您的项目中,如下所示。 同步后,将生成方向

项目模块 gradle

buildscript {
    ext.nav_version = '2.1.0'

    dependencies {
        ...
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

...

应用模块 gradle

...
apply plugin: "androidx.navigation.safeargs"

android {
    ...
}

dependencies {
...

    /*navigation component*/
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

...
}