Android Fragment savedInstanceState

时间:2013-12-10 22:20:24

标签: android android-fragments

我一直致力于将我的应用程序从多个活动更改为单个活动和多个片段。我有多个片段和单个活动A.

以下是应用程序有多个活动时的情况。

  1. 活动A - >活动B - >活动C - >活动D
  2. 在后台每隔60秒发送Web请求,然后更新UI。
  3. 我只是在onResume()方法中发送请求,并且正在取消onPause()方法中的请求和计时器,因为只有可见活动发送请求而其他人没有。
  4. 我在onSaveInstanceState(Bundle savedInstanceState)中保存了一个布尔值,以检查请求是否是第一次发送。只有这是我第一次显示进度条然后绘制视图。如果不是(如果活动从后台堆栈恢复),则不显示进度条,并且仅在成功响应时更新UI。
  5. 我从活动A移至B.现在,活动A的onPause()方法取消了Web服务请求。在活动B的onResume()中,再次调用了一个Web服务,显示了进度条(因为它是第一次加载活动)并且绘制了视图。工作与活动A类似。
  6. 从活动B我按下后退按钮,恢复活动A.因此,Web服务是从活动A的onResume()方法发送的。这次我检查savedInstanceState是否为空,因此我没有显示进度条(允许用户继续前进到acitivy B和上)。
  7. 以下是我在实施Single Activity和Multiple片段后正在做的事情。

    1. 我没有替换任何片段。我只是添加它们。
    2. 由于只是添加它们,所有片段都在时间间隔内主动发送Web服务。
    3. 如果我替换片段而不是添加片段,则视图是从第一个创建的,这不是我需要的。
    4. 我该怎么做?在此先感谢!!

1 个答案:

答案 0 :(得分:0)

这是我的建议:

对于webservice轮询创建无头片段,请参阅:http://www.vogella.com/articles/AndroidFragments/article.html

此片段将添加到您的第一个活动中,无头片段的作用是每隔60秒轮询一次Web服务,就像您现在一样。

此时不再需要布尔值,只需执行findFragmentByTag(TAG_OF_HEADLESS_FRAGMENT)并检查它是否为null,以确定它是否是第一次启动Activity。

现在,要知道在更新UI时需要实现片段回调模式的现在可见的片段,请参阅:http://developer.android.com/training/basics/fragments/communicating.html

通过回调,通信流程将类似于:

WebPollFragment -> Activity -> B When fragment B is in focus
WebPollFragment -> Activity -> C When fragment C is in focus
WebPollFragment -> Activity -> D And so on...

这也说明了我的最终建议,即在我看来你应该互相替换片段(你可以用无头片段做背景工作)。

希望这能让你顺利上路。