重用导航组件中的片段

时间:2019-06-03 01:23:09

标签: android android-fragments android-architecture-navigation android-safe-args

我有两个活动:MainActivityLoginActivity。我为每个活动有两个单独的图。我也有一个自定义Fragment,它想同时显示在LoginActivityMainActivity中。我可以轻松地将我的<fragment>包含在两个导航图中。

但是,当我根据片段所在的导航图对片段使用不同的参数时,会变得很棘手。

说,在我的nav_main中,我是这样定义的,

<fragment
        android:id="@+id/simpleFragment"
        android:name="com.example.common.SimpleFragment">
    <argument
            android:name="title"
            app:argType="string"/>
</fragment >

在我的nav_login中,我有

<fragment
        android:id="@+id/simpleFragment"
        android:name="com.example.common.SimpleFragment">
    <argument
            android:name="header"
            app:argType="string"/>
</fragment >

唯一的区别是我有两个不同的参数,一个是title,另一个是header。如果构建项目,则会得到一个SimpleFragmentArgs类,它将两个声明合并为一个。我不知道它是如何合并的,但在我看来,它是随机的。因此,以上两个声明给了我SimpleFragmentArgs一个参数header。参数title已被忽略。我的问题不是什么可以生存,什么不能生存。我要说明的一点是您很简单,无法重用带参数的片段。

我仍然可以在Fragment中使用传统的arguments并检索带有标签的绑定,但是Navigation Component建议的SafeArgs库生成了太多冗余且无法使用的代码。在正常情况下,我使用片段的单一表示形式时,我会使用SafeArgs库。但是,如果我有更多动态片段,那么我会浪费很多,这不是好的架构。

那么,在导航组件中片段重用和参数方面,有没有更好的体系结构可供使用?

0 个答案:

没有答案