具有多个片段的单个 activity 的后退按钮

Back button for single activity with multiple fragments

使用喷气背包导航,单个 activity 具有多个片段。通过导航图中定义的操作从主片段导航到另一个片段后,汉堡菜单图标保持不变,它没有变成后退箭头按钮。

如何将这个汉堡菜单图标更改为后退箭头按钮?单击时,它应该返回到主片段。

在 Android Studio 中创建一个新项目并选择 Navigation Drawer Activity 作为模板将设置单个 activity 和上述 3 个片段。

只需将此添加到您的根 activity。

if (supportFragmentManager.backStackEntryCount > 0) {
  supportActionBar!!.setDisplayHomeAsUpEnabled(true)
  toolbar.setNavigationOnClickListener {
      if (supportFragmentManager.backStackEntryCount > 0) {
          super.onBackPressed()
      } else {
          supportActionBar!!.setDisplayHomeAsUpEnabled(false)
          drawerLayout.addDrawerListener(toggle)
          toggle.syncState()
          drawerLayout.openDrawer(GravityCompat.START)
      }
  }
} else {
  supportActionBar!!.setDisplayHomeAsUpEnabled(false)
  drawerLayout.addDrawerListener(toggle)
  toggle.syncState()
}

在您的 activity

中试试这个
NavigationView nav_view = (NavigationView) findViewById(R.id.nav_view);
          drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);

        appBarConfiguration =
                new AppBarConfiguration.Builder(navController.getGraph()).build();
        setupActionBarWithNavController(this, navController,appBarConfiguration);
        NavigationUI.setupWithNavController(nav_view, navController);
        NavigationUI.setupActionBarWithNavController(this, navController);
        NavigationUI.setupActionBarWithNavController(this, navController, drawer);

我在 AppBarConfiguration 中设置了多个片段。

appBarConfiguration = AppBarConfiguration(
    setOf(
        R.id.nav_main, R.id.nav_detail
    ), drawerLayout
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController) 

由于细节片段是在 AppBarConfiguration 中设置的,这就是为什么当从主片段导航到细节片段时,汉堡包菜单图标保持不变,因为细节片段被设置为抽屉布局之一。

从 AppBarConfiguration 中删除 R.id.nav_detail 后,然后导航到详细信息片段,汉堡菜单图标将自动更改为带有 DrawerArrowDrawable 动画的后退箭头图标。

appBarConfiguration = AppBarConfiguration(
    setOf(
        R.id.nav_main
    ), drawerLayout
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)