首页 > 解决方案 > 如何使用 BottomNavigationBar 返回到 Android 中的最后一个片段

问题描述

我使用 One-Activity-Multiple-Fragments 方法和带有 NavGraph 的 JetPackNavigation。我添加了一个 BottomNavigationBar 来导航到 2 个片段,它应该可以正常工作。现在我想在 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> 

你知道我是否可以实现 back-buttom 以使其返回到最后显示的 Fragment 吗?我会很感激每一条评论。

导航图

没有人知道我该怎么做吗?我经常读到 Jetpack Navigation 非常适合处理 backstack。这是真的吗?我该怎么做?

更新:按照一个答案中的建议,我将 BottomNavigationView 的侦听器插入到 MainActivity(它使用 NavHostFragment 托管所有片段)。现在后退导航可以正常工作了。但是,使用 BottonNavigationBar 的其他底部的正常 Jetpack 导航不再起作用。当我点击其他底部时,什么也没有发生(在主活动中添加监听器之前它工作得很好)。你有什么想法,我该如何解决这个问题?下面是MainActivity类的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;
                    }
                });

关于如何解决这个问题的任何想法?

标签: androidandroid-fragmentsandroid-jetpackandroid-bottomnav

解决方案


文件

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

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

})

推荐阅读