首先,我要声明我已经在三天内一直在寻找这个问题的解决方案,这可能意味着我要么没有问正确的问题,要么没有使用好的方法.如果有的话,请指导我正确的方向.
这是场景:我有一个Activity和一个绑定的服务.该服务保留一些数据并根据需要对其进行处理,同时发布包含某些信息的持久(持续)通知.活动在ViewPager中有三个片段,显示服务处理的数据.
片段是列表片段,显示可用的活动数据条目,显示每个数据详细信息的详细信息片段和用户可以修改数据处理方式的参数片段.
[服务]< - > ([活动] – > [ViewPager([List],[Details],[Parameters])])
一切正常. My Activity绑定到Service,ViewPager创建之后,然后Fragments通过Interface获取信息.
这里有趣的部分……屏幕旋转!
当服务异步绑定时,当用户旋转屏幕时,Fragments不再拥有数据,因为Activity已经存在并且由于ViewPager而没有重新创建,因此绑定了服务.
我一直试图解决这个问题,但似乎我没有解决它的知识.我已经尝试对片段进行静态引用,在服务反弹之前设置它们但我无法获得稳定的解决方案.
我将在我的清单中使用android:configChanges,但每个方向都有不同的布局.
再说一遍,如果我使用的是糟糕的方法,请指导我!
解决方法:
当我不知道你的代码但是大声思考时很难建议….
你有一个永远不会显示的“工人片段”(即无头)并设置了setRetainInstance(true),这样它就不会丢失你设置的任何状态.
您的工作片段将绑定到服务而不是活动,并保持对它的引用.
如果您需要与Activity通信,可以使用回调来执行此操作.
您的其他片段可以与工作者而不是活动进行通信.
这个过程基本上使活动只是托管其余组件的shell.轮换将不会丢失任何内容,因为所有数据都保留在保留的片段中.