如何使用 BottomNavigationBar 返回到 Android 中的最后一个片段
How to go back to the last fragment in Android using a BottomNavigationBar
我使用一个-Activity-多个片段方法和带有 NavGraph 的 JetPackNavigation。我添加了一个 BottomNavigationBar 来导航到 2 个 Fragments,它可以正常工作。现在我想在 BottomNavigationBar 中放置一个后退按钮,如果有人按下它,它应该返回到访问的最后一个片段。我想知道这样的事情是否可行,以及是否必须在 NavGraph 中设置从所有片段到其他片段的连接,以便它可以导航回来?问题是我的 NavGraph 很大并且包含很多片段。
在这里您可以看到来自 NavGraph 的屏幕截图,其中我在 BottomNavigationBar 中指示了导航的 2 个片段(效果很好)。
此外,您可以在此处看到 BottomNavigationBar 的 XML 代码。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/Back_BottomNavigation"
android:icon = "@drawable/ic_baseline_arrow_left_24"
android:title = "Back" />
<item
android:id="@+id/FR_LanguageSelection"
android:icon = "@drawable/ic_add_circle_full"
android:title = "@string/Language" />
<item
android:id="@+id/Fragment1"
android:icon = "@drawable/ic_add_circle_full"
android:title = "Fragment1" />
</menu>
你知道我是否可以实现后退按钮,使其返回到最后显示的 Fragment?我会很感激每一条评论。
没人知道我该怎么做吗?我经常读到 Jetpack Navigation 非常适合处理后台堆栈。这是真的吗?我该怎么做?
Update:按照一个答案中的建议,我将 BottomNavigationView 的侦听器插入 MainActivity(使用 NavHostFragment 托管所有片段)。现在后退导航可以正常工作了。但是,使用 BottonNavigationBar 的其他底部的普通 Jetpack 导航不再起作用。当我点击其他底部时,没有任何反应(在 Main Activity 中添加监听器之前它工作得很好)。你有什么想法,我怎么能解决这个问题?这里是MainActivityclass:
的onCreateMethod中新增Listener的代码
//These commands were there before
final NavController navController = Navigation.findNavController(this,
R.id.navHostfragment);
NavigationUI.setupWithNavController(binding.bottomNavigation, navController);
//These are the new commands
binding.bottomNavigation.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.Back_BottomNavigation:
navController.navigateUp();
}
return true;
}
});
关于如何解决这个问题有什么想法吗?
在 BottomNavigationView OnNavigationItemSelectedListener 中设置您想要的行为
yourBottomNavigationView.setOnNavigationItemReselectedListener(object : OnNavigationItemSelectedListener{
@override fun onNavigationItemSelected (MenuItem item){
when(item){
//insert your condition to match your requirement
}
}
})
我使用一个-Activity-多个片段方法和带有 NavGraph 的 JetPackNavigation。我添加了一个 BottomNavigationBar 来导航到 2 个 Fragments,它可以正常工作。现在我想在 BottomNavigationBar 中放置一个后退按钮,如果有人按下它,它应该返回到访问的最后一个片段。我想知道这样的事情是否可行,以及是否必须在 NavGraph 中设置从所有片段到其他片段的连接,以便它可以导航回来?问题是我的 NavGraph 很大并且包含很多片段。
在这里您可以看到来自 NavGraph 的屏幕截图,其中我在 BottomNavigationBar 中指示了导航的 2 个片段(效果很好)。
此外,您可以在此处看到 BottomNavigationBar 的 XML 代码。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/Back_BottomNavigation"
android:icon = "@drawable/ic_baseline_arrow_left_24"
android:title = "Back" />
<item
android:id="@+id/FR_LanguageSelection"
android:icon = "@drawable/ic_add_circle_full"
android:title = "@string/Language" />
<item
android:id="@+id/Fragment1"
android:icon = "@drawable/ic_add_circle_full"
android:title = "Fragment1" />
</menu>
你知道我是否可以实现后退按钮,使其返回到最后显示的 Fragment?我会很感激每一条评论。
没人知道我该怎么做吗?我经常读到 Jetpack Navigation 非常适合处理后台堆栈。这是真的吗?我该怎么做?
Update:按照一个答案中的建议,我将 BottomNavigationView 的侦听器插入 MainActivity(使用 NavHostFragment 托管所有片段)。现在后退导航可以正常工作了。但是,使用 BottonNavigationBar 的其他底部的普通 Jetpack 导航不再起作用。当我点击其他底部时,没有任何反应(在 Main Activity 中添加监听器之前它工作得很好)。你有什么想法,我怎么能解决这个问题?这里是MainActivityclass:
的onCreateMethod中新增Listener的代码//These commands were there before
final NavController navController = Navigation.findNavController(this,
R.id.navHostfragment);
NavigationUI.setupWithNavController(binding.bottomNavigation, navController);
//These are the new commands
binding.bottomNavigation.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.Back_BottomNavigation:
navController.navigateUp();
}
return true;
}
});
关于如何解决这个问题有什么想法吗?
在 BottomNavigationView OnNavigationItemSelectedListener 中设置您想要的行为
yourBottomNavigationView.setOnNavigationItemReselectedListener(object : OnNavigationItemSelectedListener{
@override fun onNavigationItemSelected (MenuItem item){
when(item){
//insert your condition to match your requirement
}
}
})