具有多个片段的单个 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)
使用喷气背包导航,单个 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)