我正在启用安全参数的情况下在不同的导航图中重用片段。我注意到,如果操作不同,则会出现编译错误。这是因为xxxFragmentDirections
自动生成的代码将只生成动作之一。
在nav_graph_1.xml:
中<navigation
...
<fragment
android:id="@+id/myFragment"
android:name="com.example.android.MyFragment">
<action
android:id="@+id/next_action"
app:destination="@+id/dest_one" />
</fragment>
...
在nav_graph_2.xml:
中<navigation
...
<fragment
android:id="@+id/myFragment"
android:name="com.example.android.MyFragment">
<action
android:id="@+id/other_action"
app:destination="@+id/other_dest" />
</fragment>
...
一个简单的用例:一个银行应用程序具有两个流程:提款和存款,因此您可以拥有两个导航图。您可能会有一个AmountFragment
,您可以在其中输入一个数字,并且可以重复使用该数字来取款或入金。但是,根据流程,操作/目标可能会有所不同。
然后,如何重用此片段?
与bundle一起使用navigation(),而不是在极端情况下使用动作。不要打电话
findNavController().navigate(FragmentDirections.goToDetailFragment(id))
但是使用
findNavController().navigate(R.id.DetailFragment, bundleOf("id" to 5))
这样,您不必依赖生成的方向,但仍可以使用DetailFragment的Navigation和SafeArgs功能。