我开始使用ViewPager
时遇到了这个问题。由于每个页面都是嵌套的Fragment
,因此我无法为其调用setRetainInstance(true)
。因此,我需要将Fragment
的状态存储到Bundle
并取消/调用我不想使用的远程API方法onViewAttached/Detached
。
我从这种情况中学到了什么:
我可以使用RecyclerViewPager
来避免使用嵌套的Fragments
,但是仍然不能保留Presenter
的实例。一种方法是使用静态字段,但是Fragment
可以做同样的事情。
在MainActivity下创建某种rootViewPager
,并通过Fragments
在setVisibility(GONE/VISIBLE)
中使用它并替换Adapter
。因此,放入此Fragment
的每个ViewPager
都不会具有父Fragment
,我将解决我的情况。合适且优雅,但不是我认为的最佳解决方案。
还有其他变体吗?
最佳答案
在Mosby 3.0中,即使没有setRetainInstance(true)
也可以保留演示者...我建议等到3.0发布...
因此,我需要将Fragment的状态存储到Bundle中并取消/调用
我不想的远程API方法onViewAttached / Detached。
Mosby 2.0完全可以为您做到这一点,但是您必须使ViewState和数据实现Parcelable。在这种情况下,presenter实例将无法在屏幕方向更改中幸免,但是presenter将在相同的状态/点“恢复”(将创建一个新的Presenter实例,异步任务等也可能会重新启动)。请参见RestorableViewState(javadoc有点过时,因为它提到这是处理活动的唯一方法,因为Mosby 2.0不再适用)