【问题标题】:Android Service > Activity > Fragment with ViewPagerAndroid 服务 > 活动 > 带有 ViewPager 的片段
【发布时间】:2013-12-18 15:57:41
【问题描述】:

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

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

Fragments 是一个 List Fragment,显示可用的活动数据条目,一个 Details Fragment,显示每个数据的详细信息,以及一个 Parameters片段,用户可以在其中修改数据的处理方式。

[Service] ([Activity] -> [ViewPager([List], [Details], [Parameters])])

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

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

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

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

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

再次,如果我使用了不好的方法,请指导我!

【问题讨论】:

  • 您可以尝试使用无头片段来保存您的数据并将您的服务绑定到。 Here 是一个很好的教程。它讨论了将无头片段与异步任务一起使用,但同样适用于您的案例。这是处理屏幕旋转的推荐方式。
  • 正如@Kuffs 所建议的那样,刚刚做了,它完美地工作!不能感谢你们! :)
  • 无论如何你都可以展示你的代码,我正在试图弄清楚如何从一个活动的视图页面中实现一个片段的接口
  • @Lion789 很抱歉我迟到了。如果您仍然需要它,我可以通过 Dropbox 将文件发送给您。告诉我。

标签: android service android-viewpager orientation fragment


【解决方案1】:

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

您能否拥有一个从不显示(即无头)并设置了 setRetainInstance(true) 的“工作片段”,因此它不会丢失您设置的任何状态。

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

如果您需要与您的 Activity 进行通信,您可以通过回调来实现。

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

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

【讨论】:

  • 太完美了!太感谢了!希望我几天前就考虑过这个问题。
  • 刚刚尝试过这种方法,它就像一个魅力!再次感谢! :)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多