导航体系结构组件:如何从后堆栈导航片段?

时间:2019-01-18 20:35:20

标签: android android-studio android-fragments android-intent

我有两个片段A和B我回到A时使用导航控制器从A导航到B,导航控制器创建A的另一个实例!不从堆栈中调用旧实例并增加麻袋大小,在这种情况下,堆栈大小将为3个片段, 我该如何解决这个问题?

这是我的graph.xml

<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/home_dest"
app:startDestination="@id/home_dest">

<fragment
    android:id="@+id/a_dest"
    android:name="com.intcore.e_commerce.e_commerce.ui.homefragment.HomeFragment"
    android:label="@string/home"
    tools:layout="@layout/fragment_home" />
<fragment
    android:id="@+id/b_dest"
    android:name="com.intcore.e_commerce.e_commerce.ui.favoritesfragment.FavoritesFragment"
    android:label="@string/favorites"
    tools:layout="@layout/fragment_favorites" /></avigation>

这是我用来导航的代码。

void onAClicked() {
    Navigation.findNavController(this, R.id.nav_host_fragment).navigate(R.id.a_dest);
}


void onBClicked() {
    Navigation.findNavController(this, R.id.nav_host_fragment).navigate(R.id.b_dest);
}

1 个答案:

答案 0 :(得分:0)

  1. 对于将nav_host_fragment连接到a_dest的操作,您需要将pop行为设置为popTo nav_host_fragment inclusive(在导航编辑器中)。
  2. 重复相同的步骤以将nav_host_fragment连接到b_dest。 PopTo inclusive会弹出后台堆栈中的所有内容,包括引用的片段事务。
  3. 创建一个将a_dest连接到nav_host_fragment并将b_dest连接到nav_host_fragment的操作。对于每个片段,请在关闭包含标记的情况下选择PopTo nav_host_fragment。