我有两个活动:MainActivity
和LoginActivity
。我为每个活动有两个单独的图。我也有一个自定义Fragment
,它想同时显示在LoginActivity
和MainActivity
中。我可以轻松地将我的<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库。但是,如果我有更多动态片段,那么我会浪费很多,这不是好的架构。
那么,在导航组件中片段重用和参数方面,有没有更好的体系结构可供使用?