Android 导航组件 - 从 "anywhere"/base 片段导航?
Android Navigation Component - navigate from "anywhere"/base fragment?
我正在开发一个应用程序,它有一个古怪的装置,可以在设备旋转时打开特定的片段。在实施 android 的导航组件之前,所需要的只是对当前 activity 的引用,并且可以在特定时刻向用户显示的任何内容之上执行手动片段事务。
但是在移动到导航组件之后,我发现很难实现像上面示例或(例如)如何从基本片段显示简单对话框的通用内容 class。
有没有行之有效的方法来编写这种逻辑?
"SpecificFragment.kt" 扩展 "BaseFragment.kt"
BaseFragment.kt 可以承载所有通用逻辑以启动片段。通用片段逻辑仍然存在于 BaseFragment 中,但是 BaseFragment(抽象 class)不在导航图中(也不应该是(?)。因此,我不能调用“BaseFragmentDirections.actionXXXX() " 来自任何片段。
这个应该怎么写?
您要实现的是 global action。
在您的导航图中创建一个全局操作。像这样:
<?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())
注意:全局操作的方向class将对应于导航图的id
我正在开发一个应用程序,它有一个古怪的装置,可以在设备旋转时打开特定的片段。在实施 android 的导航组件之前,所需要的只是对当前 activity 的引用,并且可以在特定时刻向用户显示的任何内容之上执行手动片段事务。
但是在移动到导航组件之后,我发现很难实现像上面示例或(例如)如何从基本片段显示简单对话框的通用内容 class。
有没有行之有效的方法来编写这种逻辑?
"SpecificFragment.kt" 扩展 "BaseFragment.kt"
BaseFragment.kt 可以承载所有通用逻辑以启动片段。通用片段逻辑仍然存在于 BaseFragment 中,但是 BaseFragment(抽象 class)不在导航图中(也不应该是(?)。因此,我不能调用“BaseFragmentDirections.actionXXXX() " 来自任何片段。
这个应该怎么写?
您要实现的是 global action。
在您的导航图中创建一个全局操作。像这样:
<?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())
注意:全局操作的方向class将对应于导航图的id