3

我正在开发一个应用程序,它有一个古怪的噱头,可以在设备旋转时打开特定的片段。在实现 android 的导航组件之前,所需要的只是对当前活动的引用,并且可以在特定时刻向用户显示的任何内容之上执行手动片段事务。

但是在转向导航组件之后,我发现很难实现像上面的例子这样的通用东西,或者(例如)如何从基础片段类中显示一个简单的对话框。

有没有一种行之有效的方法来编写这种逻辑?

“SpecificFragment.kt”扩展“BaseFragment.kt”

BaseFragment.kt 可以托管所有通用逻辑来启动片段。通用片段逻辑仍然存在于 BaseFragment 中,但 BaseFragment(一个抽象类)不在导航图中(也不应该是(?)。因此,我不能从任何片段中调用“BaseFragmentDirections.actionXXXX()”。

这个应该怎么写?

4

1 回答 1

12

您希望实施的是一项全球行动

在导航图中创建一个全局操作。像这样:

<?xml version="1.0" encoding="utf-8"?>
<navigation 
    android:id="@+id/navigationGraph"
    ...>

  ...

  <action android:id="@+id/moveToSpecificFragment"
          app:destination="@id/specificFragment"/>

</navigation>

在你的基础片段中使用它:

findNavController().navigate(NavigationGraphDirections.moveToSpecificFragment())

注意:全局操作的 Directions 类将对应于导航图的 id

于 2020-09-16T18:18:52.800 回答