【问题标题】:Android Navigation Component - navigate from "anywhere"/base fragment?Android导航组件 - 从“任何地方”/基本片段导航?
【发布时间】:2020-09-17 02:18:52
【问题描述】:

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

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

有没有经过验证的方法来编写这种逻辑?

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

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

这应该怎么写?

【问题讨论】:

  • 如果我猜对了,您希望能够使用 NavigationComponent 从 any 片段导航到 特定 片段,对吗?

标签: android android-jetpack-navigation


【解决方案1】:

您要实现的是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())

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

【讨论】:

  • 哇,这真的隐藏在 Android Studio 的文档/UI 中(或者我真的很盲目)。我想现在是我删除我已经实现的所有硬连线通用对话框的时候了,即使我显然没有必要......感谢您指出!
  • Stackoverflow 总是比 developer.android.com 更好的文档
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2019-02-03
相关资源
最近更新 更多