我使用的是最新的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 板片段-〉导航片段-〉开始片段
除开始片段之外的所有片段都将重新创建。
任何帮助都是感激不尽的。
1条答案
按热度按时间mrphzbgm1#
对于任何想要这个问题答案的人。谷歌回答说,这是预期的行为。
https://issuetracker.google.com/issues/190893266