我正在使用最新的导航版本2.4.2。
我按照谷歌推荐的方式,使用导航组件设置底部导航栏,具体如下:
我的菜单:
然而,当我从一个片段导航到另一个片段时,它的onDestroy()被调用,当我导航回来时它会被重新创建。这是BottomNavView中所有片段的情况,除了startDestination。对于startDestination,只有onCreate()被调用一次,当导航离开它时,只有onDestroyView()被调用。我希望所有其他片段都具有这种行为,因为我需要将代码放在onCreate()方法中,并希望它在应用程序生命周期内仅运行一次。支持多个后堆栈的功能已经在Navigation 2.4.0中推出,所以我不知道问题出在哪里。当调用findNavController.navigate(...)时,以前的片段保留在后堆栈中并且没有被destroyed(),据我所知,BottomNavBar调用相同的方法,所以我无法弄清楚为什么每个片段在每次导航时都会被创建/销毁。我从:起始片段->仪表板片段->导航片段->起始片段导航。 除了起始片段,所有的片段都会被重新创建。
任何帮助都将不胜感激。
我按照谷歌推荐的方式,使用导航组件设置底部导航栏,具体如下:
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()被调用,当我导航回来时它会被重新创建。这是BottomNavView中所有片段的情况,除了startDestination。对于startDestination,只有onCreate()被调用一次,当导航离开它时,只有onDestroyView()被调用。我希望所有其他片段都具有这种行为,因为我需要将代码放在onCreate()方法中,并希望它在应用程序生命周期内仅运行一次。支持多个后堆栈的功能已经在Navigation 2.4.0中推出,所以我不知道问题出在哪里。当调用findNavController.navigate(...)时,以前的片段保留在后堆栈中并且没有被destroyed(),据我所知,BottomNavBar调用相同的方法,所以我无法弄清楚为什么每个片段在每次导航时都会被创建/销毁。我从:起始片段->仪表板片段->导航片段->起始片段导航。 除了起始片段,所有的片段都会被重新创建。
任何帮助都将不胜感激。