如何在屏幕旋转时保持 Presenter 的嵌套 Fragment 实例

How to keep Presenter's instance of nested Fragment while screen rotation

我在开始使用 ViewPager 时遇到了这个问题。由于每个页面都是 嵌套 Fragment,我不能为它调用 setRetainInstance(true)。所以,我需要将 Fragment 的状态存储到 Bundle 和 cancel/recall 远程 API 方法 onViewAttached/Detached 中,我不想这样做。

我对这种情况的了解:

  1. 我可以用RecyclerViewPager to avoid using nested Fragments, but I still can't keep an instance of Presenter。其中一种方法是使用静态字段,但我可以用 Fragment.
  2. 做同样的事情
  3. 在 MainActivity 下创建某种 rootViewPager 并通过 setVisibility(GONE/VISIBLE)Fragments 中使用它并替换 Adapter。因此,放入此 ViewPager 中的每个 Fragment 都不会有父级 Fragment,我将解决我的问题。合适且优雅,但不是我认为的最佳解决方案。

还有其他变体吗?

在 Mosby 3.0 中,即使没有 setRetainInstance(true) 也可以保留 Presenter ...我建议等到 3.0 发布时...

So, I need to store Fragment's state to a Bundle and cancel/recall remote API methods onViewAttached/Detached which I don't want to.

Mosby 2.0 完全可以为您做到这一点,但您必须让您的 ViewState 和数据实现 Parcelable。在那种情况下,presenter 实例将无法在屏幕方向更改后继续存在,但 presenter 将 "resume" 在相同的状态/点上(将创建一个新的 presenter 实例,异步任务等也可能会重新启动)。请参阅 RestorableViewState(javadoc 有点过时,因为它提到这是处理活动的唯一方法,因为 Mosby 2.0 不再适用)