android-fragments 底部导航视图中的导航创建/破坏片段导航2.4.2

bkkx9g8r  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(159)

我使用的是最新的Navigation 2.4.2版。
我设置了底部导航栏与导航组件如下,谷歌推荐的相同方式:

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_home, R.id.navigation_dashboard, R.id.navigation_notifications
        )
    )
    setupActionBarWithNavController(navController, appBarConfiguration)
    navView.setupWithNavController(navController)
}

我的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:id="@+id/navigation_home"
    android:icon="@drawable/ic_home_black_24dp"
    android:title="@string/title_home" />

<item
    android:id="@+id/navigation_dashboard"
    android:icon="@drawable/ic_dashboard_black_24dp"
    android:title="@string/title_dashboard"
    xmlns:app="http://schemas.android.com/apk/res-auto" />

<item
    android:id="@+id/navigation_notifications"
    android:icon="@drawable/ic_notifications_black_24dp"
    android:title="@string/title_notifications" />

然而,当我从一个片段导航到另一个片段时,它的onDestroy()被调用,当我导航回它时,它被重新创建。
除了startDestination之外,BottomNavView中的所有片段都是这种情况。startDestination的onCreate()只被调用一次,当导航离开它时,只调用onDestroyView()。我希望所有其他片段都是这种行为,并且我需要将代码放入onCreate()方法中,并希望它在应用的每个生命周期运行一次。
Navigation 2.4.0支持多个backstack到达,所以我不知道出了什么问题。当调用findNavController.navigate(...)时,前一个片段保留在backstack中,而不是销毁(),据我所知,BottomNavBar调用了相同的方法,所以我不知道为什么每个片段在每次导航时都被创建/销毁。
我从以下位置导航:开始片段-〉 Jmeter 板片段-〉导航片段-〉开始片段

除开始片段之外的所有片段都将重新创建。
任何帮助都是感激不尽的。

mrphzbgm

mrphzbgm1#

对于任何想要这个问题答案的人。谷歌回答说,这是预期的行为。
https://issuetracker.google.com/issues/190893266

相关问题