如何使用NavigationUI将参数传递给从NavigationDrawer调用的片段?

时间:2018-11-15 16:54:16

标签: android-architecture-navigation

我已经将我的应用程序转换为使用NavigationUI。但是setupWithNavController()代替了我的setNavigationItemSelectedListener()

在我的侦听器中,我向片段传递了(类型安全)参数。

2 个答案:

答案 0 :(得分:0)

如果我理解您的问题,那么您要寻找的是:

Navigation parameters documentation

简而言之:

在导航图中,您希望将值发送到的片段上,将添加一个参数。

<fragment android:id="@+id/myFragment" >
    <argument
        android:name="amount"
        app:argType="integer"
        android:defaultValue="0" />
</fragment>

当您将该片段作为动作引用时,该库将生成一个Directories类,其外观如下:

 val action = SpecifyAmountFragmentDirections.confirmationAction(amount)
 v.findNavController().navigate(action)

根据您命名的Fragment和操作生成名称。 另外请注意,如果它们也是可包裹的,则可以发送整个对象。

如果有问题的片段是图形的startDestination,则不确定是否可以立即执行。解决方法可能是将数据加载到Fragment中?还是可以从Activity集成到共享的ViewModel中?

祝你好运!

答案 1 :(得分:0)

如果有人仍在寻找该问题的答案。我发现了NavigationUI Global actions(使用alpha-09)有用的解决方法

您可以为导航图提供顶级操作:

<?xml version="1.0" encoding="utf-8"?>
    <navigation xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main_nav"
        app:startDestination="@id/mainFragment">
        ...
        <action android:id="@+id/action_global_mainFragment"
               app:destination="@id/mainFragment"/>
   </navigation>

并在用户单击菜单项时将其与导航控制器一起使用,以正确的捆绑软件进行导航。请小心,从NavigationView中删除.setupWithNavController(navController)调用,否则它将覆盖您的行为。