【问题标题】:Restore fragment view on pressing the back button按下后退按钮恢复片段视图
【发布时间】:2014-05-06 10:13:26
【问题描述】:

我有一个放置片段 A 的活动。然后在单击片段 A 时,我将片段 A 替换为片段 B。现在当我按下后退按钮时,它会显示片段 A。但整个视图被重新创建。我在片段 A 中调用服务,以便再次调用这些服务。我希望在不再次创建视图的情况下恢复片段 A。如果片段 A 上的服务调用正在进行中,我去片段 B 并返回,那么它应该恢复服务调用。

请建议我如何做到这一点。

【问题讨论】:

  • 您能发布您的服务代码吗?

标签: android fragment back-stack


【解决方案1】:

选项 1:

在保留的片段中设置您的服务。

This blog 很好地概述了这个主题。它谈到了与 AsycTasks 相关的保留片段,但原理是一样的。

选项 2:

在您的Fragment lifecycle methods 中检查以确保服务仅启动一次。

考虑以下伪代码:

Fragment A {

    onCreate() {
        boolean servicesStarted = false;
        ...
    }

    onResume() {
        if (servicesStarted == false) {
            startTheServices();
            servicesStarted = true;
        }
    }

【讨论】:

  • 我没有使用异步任务。我正在使用 Robospice。所以所有线程的事情都是自动处理的。当我按下返回按钮时,我只需要保持片段的状态。
  • 我了解到您使用的不是AsyncTasks,但原理是一样的。在保留的片段中执行所有 Robospice 服务。您的 Fragment A 每次创建时都可以从这个保留的 Fragment 中获取它需要显示的信息。所以 Fragment A 只是你的可视化用户界面,保留的 Fragment 实际上完成了所有的服务工作。
  • 很抱歉给您带来了困惑。我希望,如果我用所有数据对 A 进行分段,然后转到片段 B 并返回,它应该在我离开时显示片段 A,而无需再次调用 onCreateView 或服务。
  • onCreateView 将始终被调用。它是片段活动生命周期的一部分。看看我更新的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多