Android Service > Activity > Fragment with ViewPager



首先,我想说,我已经为这个问题寻找了三天的解决方案,这可能意味着我问的问题不对,或者没有使用好的方法。如果有的话,请指引我正确的方向。

这是一个场景:我有一个Activity和一个绑定的ServiceService保存一些数据并根据需要进行处理,同时发布带有一些信息的持久(正在进行的)通知。Activity在显示由Service处理的数据的ViewPager内具有三个Fragments

Fragments是显示可用活动数据项的列表片段、显示每个数据的详细信息的Details片段和用户可以修改数据处理方式的参数片段。

[服务]<->([Activity]->[ViewPager([List],[Details],[Parameters])])

一切都很好。我的Activity绑定到Service,然后创建ViewPager,然后Fragments通过Interface获取信息。

有趣的部分来了。。。屏幕旋转!

由于Service异步绑定,当用户旋转屏幕时,Fragments不再具有数据,因为Activity正在绑定服务,而它们已经存在,并且由于ViewPager而没有重新创建。

我一直在努力解决这个问题,但似乎我没有解决这个问题的知识。我尝试过对碎片进行静态引用,在服务反弹之前进行设置,但我无法获得稳定的解决方案。

我会在清单中使用android:configChanges,但每个方向都有不同的布局。

再说一遍,如果我用的方法不好,请引导我!

当我不知道你的代码但大声思考时,很难提出建议。。。。

你能有一个从未显示(即无头)并设置了setRetainInstance(true)的"工作片段"吗?这样它就不会丢失你设置的任何状态。

您的工作片段将绑定到服务而不是活动,并维护对它的引用。

如果您需要与"活动"进行沟通,可以通过回调来完成。

您的其他片段可以与工作者而不是"活动"进行通信。

这个过程基本上将使活动只不过是一个shell,其余组件都托管在其中。旋转不会损失任何东西,因为所有数据都保存在保留的片段中。

在屏幕旋转过程中,活动被完全破坏,不鼓励使用android:congfigChange。但您可以覆盖saveInstanceState(bundle)方法,在该方法中,您可以在系统响应屏幕旋转而销毁活动时保存活动中存在的数据。然后在系统将bundle传递给activities onCreate(bundle)方法或从restoreInstanceState(bundle)方法获取时接收它。

相关内容

  • 没有找到相关文章

最新更新