使用导航组件和数据绑定时,如何在目标片段之间传递多个对象?

时间:2019-09-18 14:41:20

标签: android android-fragments android-databinding android-architecture-components android-architecture-navigation

使用数据绑定时,我成功地将一个对象从一个片段传递到另一个。这是我的布局文件:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data class="ItemDataBinding">
        <variable
            name="item"
            type="com.example.myapp.Item" />
    </data>

    //Views of ItemsFragment
</layout>

这是我的代码:

action = actionItemsFragmentToItemFragment();
action.setItem(clickedItem);
Navigation.findNavController(rootView).navigate(action);

如您所见,我可以调用布局文件中定义的setItem()方法。但是,如果我在同一布局文件中添加另一个变量:

<variable
    name="shop"
    type=type="com.example.myapp.Shop"/>

并重建项目,没有没有 setShop()方法可用,因此我可以将另一个对象传递给下一个片段。我该如何解决?谢谢

1 个答案:

答案 0 :(得分:0)

在布局中定义的变量和实际导航之间看起来有些混乱。如果我对您的理解正确,则希望使用操作在导航目标之间发送两个变量。在导航图中定义了哪些变量可用作操作参数,因此您需要确保在导航图xml中包含与此类似的内容:

<fragment
    android:id="@+id/itemFragment"
...>
    <argument
        android:name="item"
        app:argType="integer" />
    <argument
        android:name="shop"
        app:argType="string" />
</fragment>

结果,您将获得导航到ItemFragment的每个操作可用的参数:

action = actionItemsFragmentToItemFragment(1,"string")

您可以使用getArguments()访问ItemFragment中的参数。在documentation中查找更多详细信息。 在下一步中,您可以使用这些变量来设置它们以用于数据绑定。