android - 如何使用 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;
}
});
关于如何解决这个问题的任何想法?
解决方案
在 BottomNavigationView 的 OnNavigationItemSelectedListener 中设置您想要的行为
yourBottomNavigationView.setOnNavigationItemReselectedListener(object : OnNavigationItemSelectedListener{
@override fun onNavigationItemSelected (MenuItem item){
when(item){
//insert your condition to match your requirement
}
}
})
推荐阅读
- .net - Dotnet 看不到 docker 卷上的文件
- dependency-injection - 库标记 DI 接口的默认实现是一种反模式吗?
- powershell - 如何验证Powershell中的.txt文件中是否不存在字符串?
- azure-ad-b2c - SAML 注销 - Azure B2C
- javascript - 有没有办法在 PrimeNG P-dropdown 值集中添加分隔符或分隔符
- r - R中的最后一次观察结果和最后一次观察结果向后进行
- android - Android 模拟器 - 升级后如何运行 Chrome 应用
- sql - Excel 中的 SQL:无法调用声明的变量
- sql-server - 有没有办法为 SQL Server 中的排序操作设置默认排序规则?或 SQL Server 2019 中的 oracle NLS_SORT 等效项
- visual-studio-code - Visual Studio Code 文件过滤器行为