片段导航和菜单。如何删除最新片段?检查说明

Fragment navigation and menu. How to remove latest fragment? Check description

我无法找到以下上下文的答案:

假设我们在主 activity 中有一个菜单和一个导航图实例。我们有 3 个片段:Home、ItemList 和 Settings。我们添加另一个名为 HourPreference 的片段。 采取下一个流程:我按下“设置”项上的底部菜单,这会将我带到 SettingsFragment。然后我们按下一个按钮,使用 findNavController().navigate(SettingsFragmentDirections.actionNavigationNotificationsToNavigationHourPreference()) 将我们带到 HourPreferenceFragment。我们在 HourPreferenceFragment 上。如果我们按回键,它会将我们带到 SettingsFragment。但是,如果我们从底部菜单中按下主页项目,那么它将带我们进入该片段,当我们按下设置项目上的底部菜单时,它会将我们定向到 HourPreferenceFragment 而不是 SettingsFragment。下面的代码片段。当我们沿着这个流程前进时,我们如何才能到达 SettingsFragment?无论您是否向我提供 link 给另一个 post 的任何答复,我都非常感谢,我只是在几个小时后找不到任何东西

简述:

行为是:按设置图标(显示 SettingsFragment)-> 按小时偏好(显示 HourPreferenceFragment)-> 按主页图标(显示 HomeFragment)-> 按设置图标,它将我带到 HourPreference 片段,但我想要它带我到 SettingsFragment!

(MainActivity.onCreate):

    val navView: BottomNavigationView = binding.navView

    navController = findNavController(R.id.nav_host_fragment_activity_main)
    val appBarConfiguration = AppBarConfiguration(
        setOf(
            R.id.navigation_home,
            R.id.navigation_items_list,
            R.id.navigation_settings
        )
    )

    setupActionBarWithNavController(navController, appBarConfiguration)
    navView.setupWithNavController(navController)

//还有

    override fun onSupportNavigateUp(): Boolean {
          return navController.navigateUp() || super.onSupportNavigateUp()
}

(activity_main.xml)

 <com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/nav_view"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="0dp"
    android:layout_marginEnd="0dp"
    android:background="@color/grey"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/bottom_nav_menu" />

<fragment
    android:id="@+id/nav_host_fragment_activity_main"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="64dp"
    app:defaultNavHost="true"
    app:layout_constraintBottom_toTopOf="@id/nav_view"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:navGraph="@navigation/mobile_navigation" />

也在 mobile_navigation.xml 图表中:

    <fragment
    android:id="@+id/navigation_settings"
    android:name="com.example.xpiry1.ui.settings.SettingsFragment"
    android:label="@string/title_settings"
    tools:layout="@layout/fragment_settings" >

    <action
                android:id="@+id/action_navigation_notifications_to_navigation_hour_preference"
        app:destination="@id/navigation_hour_preference"
        app:enterAnim="@anim/nav_default_enter_anim"
        app:popUpTo="@id/navigation_settings" />
    </fragment>

    <fragment
    android:id="@+id/navigation_hour_preference"
    android:name="com.example.xpiry1.ui.settings.preferences.HourPreferenceFragment"
    android:label="Hour Preferences"
    tools:layout="@layout/fragment_hour_preference">
    </fragment>

(设置片段)

 binding.hourPreference.root.setOnClickListener {
            findNavController().navigate(SettingsFragmentDirections.actionNavigationNotificationsToNavigationHourPreference())

找到了这个问题的核心问题。详细解释在这个.

目前,通过从 'androidx.navigation:navigation-fragment-ktx:2.4.1' 降级片段依赖来解决它 到 'androidx.navigation:navigation-fragment-ktx:2.3.5' 现在一切正常。