我正在将Android导航组件与底部导航视图一起使用。
我的底部导航视图中有3个片段,片段-A,B和C。
预期的行为:
要退出应用,请按任意片段。
观察到的行为: A-> B-> C-> A-> B->后退-> A->后退-> C->后退B->后退A->后退->退出。
(为底部导航片段添加了片段堆栈) 如何实现我的预期行为?
我的问题与开发人员文档中的问题相同,但我在底部导航视图中找到了它:
https://developer.android.com/guide/navigation/navigation-getting-started#popupto_example_circular_logic
代码:
底部导航视图设置:
// Setup bottom navigation view
private fun setUpBottomNavigationView() {
// Nav host fragment
val host: NavHostFragment = supportFragmentManager
?.findFragmentById(R.id.main_activity_nav_host_fragment) as NavHostFragment
// Set up Action Bar
val navController = host.navController
// Setup bottom navigation view
mainActivityBinding.mainActivityBottomNavigationView.setupWithNavController(navController)
}
导航图:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_navigation"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.app.view.main.home.HomeFragment"
android:label="home_fragment"
tools:layout="@layout/home_fragment" />
<fragment
android:id="@+id/settingsFragment"
android:name="com.app.view.main.settings.SettingsFragment"
android:label="settings_fragment"
tools:layout="@layout/settings_fragment" />
<fragment
android:id="@+id/statisticsFragment"
android:name="com.app.view.main.statistics.StatisticsFragment"
android:label="statistics_fragment"
tools:layout="@layout/statistics_fragment" />
</navigation>
底部导航菜单:
<?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/homeFragment"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/home"
app:showAsAction="ifRoom" />
<item
android:id="@+id/statisticsFragment"
android:icon="@drawable/ic_assessment_black_24dp"
android:title="@string/statistics"
app:showAsAction="ifRoom" />
<item
android:id="@id/settingsFragment"
android:icon="@drawable/ic_settings_black_24dp"
android:title="@string/settings"
app:showAsAction="ifRoom" />
</menu>
答案 0 :(得分:0)
'在您的主要活动中覆盖onbackpress方法并像这样完成活动。'
@Override
public void onBackPressed() {
finish();
}
“这将解决您的问题”
答案 1 :(得分:0)
在这种情况下,您需要将登录流程设置为主导航图内的嵌套图。
您的起始目的地应该分配给连接到BottomNavigationView
的3个片段之一,以便按 Back 可以使用户进入此屏幕,然后退出该应用程序。
在您的HomeFragment
(开始目标)中,您可以检查用户是否已登录,并在需要时导航到嵌套的登录图。
HomeFragment.kt
if (!isLoggedIn) {
val action = HomeFragmentDirections.showLogin()
findNavController().navigate(action)
} else {
// show bottom nav
}
您必须根据需要处理{/ {1}}的隐藏/显示。
您更新后的导航图将如下所示:
main_nav.xml
BottomNavigationView