如何使用 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;
                    }
                });

关于如何解决这个问题有什么想法吗?

documentation

在 BottomNavigationView OnNavigationItemSelectedListener 中设置您想要的行为

yourBottomNavigationView.setOnNavigationItemReselectedListener(object : OnNavigationItemSelectedListener{
@override fun onNavigationItemSelected (MenuItem item){
  when(item){
    //insert your condition to match your requirement
  }
}

})