我开始使用ViewPager时遇到了这个问题。由于每个页面都是嵌套的Fragment,因此我无法为其调用setRetainInstance(true)。因此,我需要将Fragment的状态存储到Bundle并取消/调用我不想使用的远程API方法onViewAttached/Detached

我从这种情况中学到了什么:


我可以使用RecyclerViewPager来避免使用嵌套的Fragments,但是仍然不能保留Presenter的实例。一种方法是使用静态字段,但是Fragment可以做同样的事情。
在MainActivity下创建某种rootViewPager,并通过FragmentssetVisibility(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不再适用)

10-07 19:47
查看更多