当前位置: 首页 > 知识库问答 >
问题:

将导航UI与导航抽屉一起使用时,不会将片段添加到backstack中

司马作人
2023-03-14

我正在使用Android导航组件创建一个带有导航抽屉的应用程序。但是,如果通过导航抽屉更改当前片段,然后按回,应用程序将始终返回到导航图的开始片段。我只能找到如何在使用导航组件时从backback中删除片段的解决方案,而不能找到如何添加片段的html" target="_blank">解决方案。

我已经在NavController的AppBarConfiguration中添加了其他片段作为根片段,但这不会改变行为。在应用程序的其他部分使用标准navController.navigate()时,片段会正确添加到背包中。只有当我从导航抽屉切换片段时,它们才不会添加到背包中。

我还尝试过更改Fragments之间的操作(例如popUpTopopUpTo包容性),但导航组件似乎没有使用这些,因为它不会更改任何内容。

主要活动。Java语言

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstaceState);
    setContentView(R.layout.activity_main);

    DrawerLayout drawer_layout = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);

    navController = Navigation.findNavController(this, R.id.nav_host_fragment);

    appBarConfiguration = new AppBarConfiguration.Builder(R.id.homeFragment, R.id.Fragment1,
                          R.id.Fragment2, R.id.Fragment3).setDrawerLayout(drawer_layout).build();

    NavigationUI.setupWithNavController(navigationView, navController);
    NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

@Override
public boolean onSupportNavigateUp() {
    navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    return NavigationUI.navigateUp(navController, appBarConfiguration) || super.onSupportNavigateUp();
}

导航图。xml

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

    <fragment
        android:id="@+id/homeFragment"
        android:name="package.fragments.homeFragment"
        android:label="@string/home_fragment_label"
        tools:layout="@layout/fragment_home" />
    <fragment
        android:id="@+id/Fragment1"
        android:name="package.fragments.Fragment1"
        android:label="@string/fragment1_label"
        tools:layout="@layout/fragment1" />
    <fragment
        android:id="@+id/Fragment2"
        android:name="package.fragments.Fragment2"
        android:label="@string/fragment2_label"
        tools:layout="@layout/fragment2" />
    <fragment
        android:id="@+id/Fragment3"
        android:name="package.fragments.Fragment3"
        android:label="@string/fragment3_label"
        tools:layout="@layout/fragment3" />
</navigation>

当从Fragment1切换到Fragment2然后按回时,我希望应用程序返回到Fragment1,但应用程序会重定向到home片段。有什么方法可以防止导航组件总是返回到开始片段而不是前一个片段?

非常感谢

共有1个答案

王楚青
2023-03-14

我已经设法生成了所需的行为。我只是忽略了留档的相关部分。如NavigationUI的留档所述,您需要将android: menu类别="次要"添加到导航视图菜单中的菜单项。通过在XML文件中添加此行,切换到相应的片段时不会弹出后端堆栈,因此应用程序在回击时会返回到前一个片段。

 类似资料:
  • 我有一个应用程序,我正在编写,它已经包含了很多代码,我决定我想添加一个导航抽屉到主要的activity工具栏,但我不知道如何做,不创建一个新的导航抽屉项目,复制我的整个项目到它,这似乎是很多工作,有没有一个教程添加导航抽屉到一个现有的项目?

  • 我正在学习android和java的编程,需要一些关于android上“导航抽屉”的帮助。 我正在努力为抽屉项的单击侦听器添加一个switch语句,我使用的代码取自以下示例:http://hmkcode.com/android-creating-a-navigation-drawer/ 我应该如何准确地处理switch语句,以便从触摸其中一个项目开始新的活动? 非常感谢。 编辑 public vo

  • 我已经从Android官方网站下载了示例项目http://developer.android.com/training/implementing-navigation/nav-drawer.html.我试图了解导航抽屉是如何工作的。所以,我有一个疑问,他们从左侧菜单中为每个项目调用一个片段。在我的项目中,我有一个大活动,我试图通过这个片段调用它: 公共类HomeFragment扩展了片段{ } 但

  • 我想在我的应用程序中实现一个导航抽屉,但我对是否应该将其与片段或活动一起使用(有关更多详细信息,请参见下图)存在冲突。 这两者之间有什么真正的优缺点吗,还是只是一个偏好的问题? 编辑: 只是为了澄清我的问题: 在使用活动而不是片段的情况下 当我选择“导入”将打开一个活动而不是一个片段,如果我选择“图库”,它将打开一个活动,其中包含图库项目等的内容,以及抽屉窗口中其他项目的内容。 如果我从抽屉窗口中

  • 问题内容: 在以下活动中,我上面有一个片段和一个图像。片段只是一个较暗的操作栏,上面有图片。我正在尝试将左侧幻灯片菜单作为一个片段,以便可以在每次活动中使用它。 主要活动; 主要活动XML; 每个活动上应包含的标题栏片段; 标题栏片段XML; 如何在标题栏中实现导航抽屉? 问题答案: 尝试这样的操作,对于布局文件,您只需要 实现可以像这样简单。

  • 我目前正在为我的Android应用程序使用导航抽屉。在我的第一个片段中,有一个片段使用Facebook的Graph API加载数据。因此,当我的应用程序第一次加载时,它首先进入第一个片段。 然后,我使用导航抽屉单击另一个片段并查看它。 最后,我重用导航抽屉返回第一个片段并查看它。 我面临的问题是,我如何继续利用已经创建过一次的片段,而不是在选择导航抽屉项时重新创建它。我的片段切换代码如下所示。 我