Android 使用导航组件和菜单项,如何让“向上”按钮返回到上一个片段,而不是;“主要”;碎片

Android 使用导航组件和菜单项,如何让“向上”按钮返回到上一个片段,而不是;“主要”;碎片,android,android-fragments,Android,Android Fragments,我使用的是导航组件架构。我在操作栏中有一个菜单项,用户可以单击该菜单项进入设置。我正在使用一个活动到多个片段的方法。因此,这个带有菜单项的操作栏跨越了我的所有片段 假设我有3个片段。片段A是主要片段。当我在设置首选项中时,“向上”按钮总是将我带回片段A。即使我从片段B或C调用它 下面是我所说的“向上”按钮(即所谓的“向上”按钮”)的意思: 这是我实际的NavGraph 从中可以看到Frag A通过一个动作链接到设置。我这样做是因为这是主片段,片段的宿主活动从这里开始。不管怎么说,这都没什么区

我使用的是导航组件架构。我在操作栏中有一个菜单项,用户可以单击该菜单项进入设置。我正在使用一个活动到多个片段的方法。因此,这个带有菜单项的操作栏跨越了我的所有片段

假设我有3个片段。片段A是主要片段。当我在设置首选项中时,“向上”按钮总是将我带回片段A。即使我从片段B或C调用它

下面是我所说的“向上”按钮(即所谓的“向上”按钮”)的意思:

这是我实际的
NavGraph

从中可以看到Frag A通过一个动作链接到设置。我这样做是因为这是主片段,片段的宿主活动从这里开始。不管怎么说,这都没什么区别。我删除了这个动作,但它的行为仍然是一样的

这是我的OnOptions ItemSelected

//Preform action when selected
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    return NavigationUI.onNavDestinationSelected(item, navController)
            || super.onOptionsItemSelected(item);
}
那么,如果从片段C转到设置,如何回到片段C,而不是片段A

那么,如果从片段C转到设置,如何回到片段C,而不是片段A

我假设您已经将导航操作从片段C添加到设置片段,以便您可以从
片段C
导航到
设置片段

因此,以下是导航图中此操作的演示示例:

<fragment
    android:id="@+id/cFragment"
    android:name="...."
    android:label="fragment_c"
    tools:layout="@layout/fragment_c" >

    ....

    <action
        android:id="@+id/action_cFragment_to_settingsFragment"
        app:destination="@id/settingsFragment"
        app:popUpTo="@id/cFragment" />
</fragment>
注意:如果在其他片段上看到home按钮,可以通过以下方式将其删除:

setHasOptionsMenu(false);
((AppCompatActivity) requireActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);

NavigationUI
包含处理菜单项的
onNavDestinationSelected
方法。默认情况下,此方法将弹出整个后堆栈。修复方法是为菜单中的项目将
android:menuCategory=“secondary”
添加到xml中,如下所述:


太好了,我们明天将尝试实施。@COYG请放心:)。。我试着实现它,但没有任何乐趣,所以不得不进一步研究。修复方法简单得多,但我不得不去找它。看看我的答案,我是如何解决的。
setHasOptionsMenu(false);
((AppCompatActivity) requireActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);