Android服务>活动>使用ViewPager进行分段

时间:2013-12-18 15:57:41

标签: android service android-viewpager orientation fragment

首先,我要声明我已经在三天内一直在寻找这个问题的解决方案,这可能意味着我要么没有问正确的问题,要么没有使用好的方法。如果有的话,请指导我正确的方向。

这是一个场景:我有Activity和绑定ServiceService保留一些数据并根据需要对其进行处理,同时发布包含某些信息的持久(正在进行)通知。 ActivityFragmentsViewPagerService,显示由Fragments处理的数据。

Activity列表片段,显示可用的有效数据条目,详细信息片段,显示每个数据的详细信息和参数Fragment ,用户可以在其中修改数据的处理方式。

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

一切正常。我的Service绑定到ViewPager,之后创建Fragments,然后通过Interface创建Service获取信息。

这里有趣的部分......屏幕旋转!

Fragments异步绑定时,当用户旋转屏幕时,Activity不再拥有数据,因为ViewPager绑定了服务,而它们已经存在且未重新创建感谢android:configChanges

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

我在清单中使用{{1}},但每个方向都有不同的布局。

同样,如果我使用不好的方法,请指导我!

2 个答案:

答案 0 :(得分:2)

当我不知道你的代码但是大声思考时很难建议......

你能否拥有一个永远不会显示的“工人片段”(即无头)并设置setRetainInstance(true),这样就不会丢失你设置的任何状态。

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

如果您需要与您的活动进行通信,可以使用回调来执行此操作。

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

此过程基本上会使活动仅仅是托管其余组件的shell。轮换将不会丢失任何内容,因为所有数据都保留在保留的片段中。

答案 1 :(得分:0)

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