首页 > 解决方案 > 当显示带有导航组件的对话框时,有没有办法留在当前片段?

问题描述

我使用带有导航组件的底部导航活动来显示一个对话框。但是当对话框出现时,活动切换到主页片段。当对话框显示时,有没有办法留在当前片段? 屏幕记录

我尝试了两个版本的导航组件:

导航图:

<?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/mobile_navigation"
    app:startDestination="@+id/navigation_a">

    <fragment
        android:id="@+id/navigation_a"
        android:name="com.example.myapplication.ui.AFragment"
        android:label="@string/title_fragment_a"
        tools:layout="@layout/fragment_a" />
    <fragment
        android:id="@+id/navigation_b"
        android:name="com.example.myapplication.ui.BFragment"
        android:label="@string/title_fragment_b"
        tools:layout="@layout/fragment_b" />
    <fragment
        android:id="@+id/navigation_c"
        android:name="com.example.myapplication.ui.CFragment"
        android:label="@string/title_fragment_c"
        tools:layout="@layout/fragment_c" />
    <dialog
        android:id="@+id/navigation_d"
        android:name="com.example.myapplication.ui.DDialog"
        android:label="DDialog"
        tools:layout="@layout/dialog_d" />

</navigation>

主要活动 :

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    val navView: BottomNavigationView = binding.navView

    val navController = findNavController(R.id.nav_host_fragment_activity_main)
    // Passing each menu ID as a set of Ids because each
    // menu should be considered as top level destinations.
    val appBarConfiguration = AppBarConfiguration(
        setOf(R.id.navigation_a, R.id.navigation_b, R.id.navigation_c)
//            setOf(R.id.navigation_a, R.id.navigation_b, R.id.navigation_c, R.id.navigation_d)
    )
    setupActionBarWithNavController(navController, appBarConfiguration)
    navView.setupWithNavController(navController)
}

底部栏菜单

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/navigation_a"
        android:icon="@drawable/ic_baseline_filter_1_24"
        android:title="@string/title_fragment_a" />
    <item
        android:id="@+id/navigation_b"
        android:icon="@drawable/ic_baseline_filter_2_24"
        android:title="@string/title_fragment_b" />
    <item
        android:id="@+id/navigation_c"
        android:icon="@drawable/ic_baseline_filter_3_24"
        android:title="@string/title_fragment_c" />
    <item
        android:id="@+id/navigation_d"
        android:icon="@drawable/ic_baseline_crop_square_24"
        android:title="@string/title_dialog" />

</menu>

标签: androidbottomnavigationviewandroid-architecture-navigationandroid-bottomnav

解决方案


推荐阅读