【问题标题】:Avoid Android automatically re-add my fragment on orientation change避免Android在方向更改时自动重新添加我的片段
【发布时间】:2011-07-17 18:12:05
【问题描述】:

我有一个ListFragment,它依赖于托管Activity 来正确初始化。第一次运行时,它加载正常。一旦我改变方向,我的应用程序就会崩溃。从堆栈跟踪中我可以看到不是我试图过早地添加Fragment,而是Android 试图恢复Fragment

我在onStart 方法中设置了setRetainInstance(false),但是一旦方向改变,我找不到任何方法来禁用Fragment 的恢复。有任何想法吗?我是否需要在我的应用被销毁之前删除Fragment

编辑:我最终延迟了初始化列表,直到 Activity 准备好。在设置适配器之前,Android 会方便地显示“正在加载”消息。

【问题讨论】:

    标签: java android android-3.0-honeycomb android-fragments


    【解决方案1】:

    我最终延迟了初始化列表,直到 Activity 准备好。在设置适配器之前,Android 会方便地显示“正在加载”消息。

    【讨论】:

      【解决方案2】:

      我有一个 ListFragment,它依赖于托管 Activity 来正确初始化。

      这可能是你的困难所在。

      从堆栈跟踪中我可以看出不是我试图过早添加 Fragment,而是 Android 试图恢复 Fragment。

      正确。

      有什么想法吗?

      我会专注于正确处理配置更改。在片段中的onSaveInstanceState()onRetainNonConfigurationInstance()getLastNonConfigurationInstance()(在Activity 上)和onAttach()(在你的Fragment 上)的组合之间,您应该能够传递旧片段中的任何内容到新的没有崩溃。对于配置更改,不要依赖“宿主 Activity 正确初始化”。

      【讨论】:

      • Activity 已经优雅地处理了方向变化。 Fragment 依赖于 Activity,因为 Activity 绑定到 Service 并从那里获取信息,供 Fragment 使用。你的建议似乎没有冒犯的意思,相当笨拙。除非有其他想法,否则我可能会在调用 OnDestroy 之前的某个阶段删除 Fragment。
      • @Al:“方向变化已经被 Activity 优雅地处理了。” - 显然不是,否则你不会发布这个问题。 “Fragment 依赖于 Activity,因为 Activity 绑定到 Service 并从那里获取信息,这些信息由 Fragment 使用。” - 所以? “你的建议似乎没有冒犯的意思,相当笨拙。” - 我会对您当前的实施说同样的话。正如他们所说,美丽在旁观者的眼中。
      猜你喜欢
      • 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
      相关资源
      最近更新 更多