【问题标题】:Restore the UI-state after recreating the fragment重新创建片段后恢复 UI 状态
【发布时间】:2019-12-18 14:52:40
【问题描述】:

用 Fragment-B 替换 Fragment-A 后,如何恢复其 UI 状态,然后再次调用 Fragment-A?

【问题讨论】:

  • 您需要更具体地了解replace 后面是否也跟着addToBackStack
  • @EpicPandaForce 是的,replace 后面是addToBackStack。例如,我想打开一个SettingsFragment,如果我回到HomeFragment,我想要和以前一样的 UI 状态。

标签: java android android-fragments android-lifecycle


【解决方案1】:

您可以在这两个片段之间使用 SharedViewModel 并将状态存储在那里。

Share data between fragments with SharedViewModel

【讨论】:

  • 只有当我们考虑从viewmodel-savedstate添加SavedStateHandle,并且SharedViewModelSavedStateHandle中存储/检索它的状态时,这个答案才是完整的,它从AbstractSavedStateViewModelFactory获得.
  • @MakinTosH 这是个好主意,但是如果我替换一个片段,它将从 onCreate 开始,并且 ViewModel 将被清除。还是我错了?
  • SharedViewModel 的范围仅限于活动,因此当片段被销毁时它不会被清除。 viewModel = activity?.run { ViewModelProviders.of(this)[SharedViewModel::class.java] } ?: throw Exception("Invalid Activity")
猜你喜欢
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2013-04-04
相关资源
最近更新 更多