Android Jetpack 导航:从 "non-navigation" 片段导航
Android Jetpack Navigations: navigate from "non-navigation" fragment
我在我的应用程序中使用 Jetpack Navigation,现在我遇到了一个我不完全理解的情况。
我有一个片段 CouponFragment
应该在多个地方使用(在其他片段中通过静态 xml 标记和在未连接到 navGraph 的 bottomSHeetDialog 中)。我需要此片段才能导航到 WebviewFragment
,这是 navGraph 中的目的地。
我为 CouponFragment
添加了导航条目:
在最简单的情况下(CouponFragment
在另一个导航连接的片段中)解决方案非常简单,我向包含 CouponFragment
的片段添加了一个动作,例如:
<fragment
android:id="@+id/navigation_results"
android:name="ResultsFragment"
tools:layout="@layout/fragment_results">
<action
android:id="@+id/action_webview"
app:destination="@id/navigation_webview" />
</fragment>
这行得通。当我尝试从 BottomSheetFragmentDialog
内的 CouponFragment
导航时,真正的问题来了。我尝试向调用对话框的导航连接片段添加一个动作:
<fragment
android:id="@+id/navigation_profile"
android:name="ProfileFragment"
android:label="@string/title_profile"
tools:layout="@layout/fragment_profile">
<action
android:id="@+id/action_webview"
app:destination="@id/navigation_webview" />
</fragment>
但这会导致此异常:
java.lang.IllegalArgumentException: Navigation action/destination package.name:id/action_webview cannot be found from the current destination Destination(package.name:id/navigation_webview) class=WebViewFragment
这很奇怪,因为看起来正在搜索目标片段上的操作。我尝试将 action_webview
添加到 navigation_webview
:
只是想看看会发生什么,什么也没做。没有打印日志。
任何人都可以提示如何解决这个问题吗?
我开始回答主要问题只是因为细节非常模糊,如有必要请进行编辑。
要从 non_navigation 片段导航:
使用深度 link,这是文档:https://developer.android.com/guide/navigation/navigation-deep-link
只需使用 ParentFragmentDirections 和当前的 NavController。
例如:
- FragmentA 嵌套 Non-Navigation-FragmentY
- 片段B
要从 FragmentY 导航到 FragmentB,只需从 MainNavigationHostFragment 加载 NavController 并将其设置为目的地“FragmentADirections.actionFragmentA_to_FragmentB()”
我在我的应用程序中使用 Jetpack Navigation,现在我遇到了一个我不完全理解的情况。
我有一个片段 CouponFragment
应该在多个地方使用(在其他片段中通过静态 xml 标记和在未连接到 navGraph 的 bottomSHeetDialog 中)。我需要此片段才能导航到 WebviewFragment
,这是 navGraph 中的目的地。
我为 CouponFragment
添加了导航条目:
在最简单的情况下(CouponFragment
在另一个导航连接的片段中)解决方案非常简单,我向包含 CouponFragment
的片段添加了一个动作,例如:
<fragment
android:id="@+id/navigation_results"
android:name="ResultsFragment"
tools:layout="@layout/fragment_results">
<action
android:id="@+id/action_webview"
app:destination="@id/navigation_webview" />
</fragment>
这行得通。当我尝试从 BottomSheetFragmentDialog
内的 CouponFragment
导航时,真正的问题来了。我尝试向调用对话框的导航连接片段添加一个动作:
<fragment
android:id="@+id/navigation_profile"
android:name="ProfileFragment"
android:label="@string/title_profile"
tools:layout="@layout/fragment_profile">
<action
android:id="@+id/action_webview"
app:destination="@id/navigation_webview" />
</fragment>
但这会导致此异常:
java.lang.IllegalArgumentException: Navigation action/destination package.name:id/action_webview cannot be found from the current destination Destination(package.name:id/navigation_webview) class=WebViewFragment
这很奇怪,因为看起来正在搜索目标片段上的操作。我尝试将 action_webview
添加到 navigation_webview
:
只是想看看会发生什么,什么也没做。没有打印日志。
任何人都可以提示如何解决这个问题吗?
我开始回答主要问题只是因为细节非常模糊,如有必要请进行编辑。
要从 non_navigation 片段导航:
使用深度 link,这是文档:https://developer.android.com/guide/navigation/navigation-deep-link
只需使用 ParentFragmentDirections 和当前的 NavController。
例如:
- FragmentA 嵌套 Non-Navigation-FragmentY
- 片段B
要从 FragmentY 导航到 FragmentB,只需从 MainNavigationHostFragment 加载 NavController 并将其设置为目的地“FragmentADirections.actionFragmentA_to_FragmentB()”