Nam*_*mNH 8 navigation android android-architecture-navigation android-jetpack-navigation
我有 3 个底部导航选项卡,称为Home, Dashboard, Profile.
Home,我有Fragment1和Fragment2,Dashboard,我有Fragment3和Fragment4Profile,我有MyProfile和EditProfile。现在,在 中Fragment2,一个按钮changeAvatar可以EditProfile在 stack 中打开Profile。因为EditProfile应该在 tab 中Profile,所以如果我不想包含EditProfile到navGraphof 中Home,我该如何实现这种行为?
您正在寻找的就是所谓的全球行动。
鉴于您具有以下nav_graph结构:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_nav_graph"
app:startDestination="@id/actionHome">
<navigation
android:id="@+id/actionHome"
android:label="Home"
app:startDestination="@id/fragment1">
<fragment
android:id="@+id/fragment1"
android:name="com.example.app.Fragment1"
android:label="Home Fragment 1"
tools:layout="@layout/fragment_1" />
<fragment
android:id="@+id/fragment2"
android:name="com.example.app.Fragment2"
android:label="Home Fragment 2"
tools:layout="@layout/fragment_2" />
</navigation>
<navigation
android:id="@+id/actionDashboard"
android:label="Dashboard"
app:startDestination="@id/fragment3">
<fragment
android:id="@+id/fragment3"
android:name="com.example.app.Fragment3"
android:label="Dashboard Fragment 3"
tools:layout="@layout/fragment_3" />
<fragment
android:id="@+id/fragment4"
android:name="com.example.app.Fragment4"
android:label="Dashboard Fragment 4"
tools:layout="@layout/fragment_4" />
</navigation>
<navigation
android:id="@+id/actionProfile"
android:label="Profile"
app:startDestination="@id/myProfileFragment">
<fragment
android:id="@+id/myProfileFragment"
android:name="com.example.app.MyProfileFragment"
android:label="My Profile"
tools:layout="@layout/fragment_my_profile"/>
<fragment
android:id="@+id/editProfileFragment"
android:name="com.example.app.EditProfileFragment"
android:label="Edit Profile"
tools:layout="@layout/fragment_edit_profile"/>
<action
android:id="@+id/navigateToEditProfile"
app:destination="@id/editProfileFragment" />
</navigation>
</navigation>
Run Code Online (Sandbox Code Playgroud)
请注意action以下部分actionProfile:
<action
android:id="@+id/navigateToEditProfile"
app:destination="@id/editProfileFragment" />
Run Code Online (Sandbox Code Playgroud)
以上是您正在寻找的实际全球行动。
因此,要全面了解流程,您需要执行以下操作以从Fragment2“changeAvatar”按钮进行导航。
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_nav_graph"
app:startDestination="@id/actionHome">
<navigation
android:id="@+id/actionHome"
android:label="Home"
app:startDestination="@id/fragment1">
<fragment
android:id="@+id/fragment1"
android:name="com.example.app.Fragment1"
android:label="Home Fragment 1"
tools:layout="@layout/fragment_1" />
<fragment
android:id="@+id/fragment2"
android:name="com.example.app.Fragment2"
android:label="Home Fragment 2"
tools:layout="@layout/fragment_2" />
</navigation>
<navigation
android:id="@+id/actionDashboard"
android:label="Dashboard"
app:startDestination="@id/fragment3">
<fragment
android:id="@+id/fragment3"
android:name="com.example.app.Fragment3"
android:label="Dashboard Fragment 3"
tools:layout="@layout/fragment_3" />
<fragment
android:id="@+id/fragment4"
android:name="com.example.app.Fragment4"
android:label="Dashboard Fragment 4"
tools:layout="@layout/fragment_4" />
</navigation>
<navigation
android:id="@+id/actionProfile"
android:label="Profile"
app:startDestination="@id/myProfileFragment">
<fragment
android:id="@+id/myProfileFragment"
android:name="com.example.app.MyProfileFragment"
android:label="My Profile"
tools:layout="@layout/fragment_my_profile"/>
<fragment
android:id="@+id/editProfileFragment"
android:name="com.example.app.EditProfileFragment"
android:label="Edit Profile"
tools:layout="@layout/fragment_edit_profile"/>
<action
android:id="@+id/navigateToEditProfile"
app:destination="@id/editProfileFragment" />
</navigation>
</navigation>
Run Code Online (Sandbox Code Playgroud)
尝试使用深层链接
导航图。
<navigation
...>
<fragment
android:id="@+id/editProfileFragment"
>
...
<deepLink
android:id="@+id/deepLink"
app:uri="yourapp://edit/prfile" />
...
</fragment>
</navigation>
Run Code Online (Sandbox Code Playgroud)
在片段中。
findNavController().navigate(Uri.parse("yourapp://edit/prfile"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |