android-fragments 为什么google-iosched可以在使用导航组件导航时保存片段状态

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

总的来说看看代码,我不明白为什么它可以做到. https://github.com/google/iosched x1c 0d1x
从apps/iosched/ui/MainActivity.kt,它初始化了NavController和NavHostFragment,但似乎没有特殊处理。https://github.com/google/iosched/blob/main/mobile/src/main/java/com/google/samples/apps/iosched/ui/MainActivity.kt

val appBarConfiguration = AppBarConfiguration(TOP_LEVEL_DESTINATIONS)
private val TOP_LEVEL_DESTINATIONS = setOf(
            R.id.navigation_feed,
            R.id.navigation_schedule,
            R.id.navigation_map,
            R.id.navigation_info,
            // R.id.navigation_agenda, comment will not stop saving the statement.
            R.id.navigation_codelabs,
            R.id.navigation_settings
        )

来自apps/iosched/ui/议程片段.kt:最简单的片段,BindingAdapter方法将始终初始化AgendaAdapter(),但它可以在init之后保存RecyclerView的位置。https://github.com/google/iosched/blob/main/mobile/src/main/java/com/google/samples/apps/iosched/ui/agenda/AgendaFragment.kt
为什么它可以保存每个片段的状态?

kulphzqa

kulphzqa1#

IOSched取决于Navigation 2.4.1。根据Navigation 2.4.0的发行说明:
NavController ...已扩展为支持保存和恢复后台堆栈。
作为此更改的一部分,onNavDestinationSelected()BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController()NavigationUI方法现在可以自动保存和恢复弹出的目标的状态,从而支持multiple back stacks而无需任何代码更改。当使用带有片段的导航时,这是与多个后台堆栈集成的推荐方式。
IOSched使用setupWithNavController,这意味着每个选项卡都将自动保存并正确恢复其状态。
这包括RecyclerView的状态,它始终支持自动保存和恢复其位置。

相关问题