如何在屏幕旋转时保持 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
中,我不想这样做。
我对这种情况的了解:
- 我可以用
RecyclerViewPager
to avoid using nested Fragments
, but I still can't keep an instance of Presenter
。其中一种方法是使用静态字段,但我可以用 Fragment
. 做同样的事情
- 在 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 不再适用)
我在开始使用 ViewPager
时遇到了这个问题。由于每个页面都是 嵌套 Fragment
,我不能为它调用 setRetainInstance(true)
。所以,我需要将 Fragment
的状态存储到 Bundle
和 cancel/recall 远程 API 方法 onViewAttached/Detached
中,我不想这样做。
我对这种情况的了解:
- 我可以用
RecyclerViewPager
to avoid using nestedFragments
, but I still can't keep an instance ofPresenter
。其中一种方法是使用静态字段,但我可以用Fragment
. 做同样的事情
- 在 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 不再适用)