Android片段导航:如何以编程方式导航到任意片段

时间:2020-07-16 15:43:49

标签: android navigation fragment

我正在学习使用Android片段导航。

现在,我可以按照示例使用ID导航到导航图中定义的特定目标片段。如下所示:

<fragment android:id="@+id/a"
          android:name="com.example.myapplication.FragmentA"
          android:label="a"
          tools:layout="@layout/a">
    <action android:id="@+id/action_a_to_b"
            app:destination="@id/b"
            app:enterAnim="@anim/nav_default_enter_anim"
            app:exitAnim="@anim/nav_default_exit_anim"
            app:popEnterAnim="@anim/nav_default_pop_enter_anim"
            app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>

viewTransactionsButton.setOnClickListener { view ->
   view.findNavController().navigate(R.id.viewTransactionsAction)
}

但是,我有一个特殊的用例,我想以编程方式导航到目标片段,该片段在navi图中未定义。我该如何实现呢?

itemView.setOnclickListener { view ->
    val targetFragmentClass = getTargetFragmentClass(view)
    //How can I findNavController().navigate() to created targetFragmentClass instance?
}

我检查了导航控制器的文档,其导航()方法的所有版本都需要一些资源ID,这意味着我必须在XML中定义操作或目标。但是我想要像遗留片段管理器API这样的东西,我可以实例化任何片段类并创建一个事务来应用它。

所以,我的问题是:

  1. 我可以使用导航组件纯粹以编程方式导航到任意片段吗?
  2. 如果必须使用片段管理器/事务处理这种情况,我可以使其与导航控制器一起使用吗?

非常感谢。

0 个答案:

没有答案