避免Android在方向更改时自动重新添加我的片段
Posted
技术标签:
【中文标题】避免Android在方向更改时自动重新添加我的片段【英文标题】:Avoid Android automatically re-add my fragment on orientation change 【发布时间】:2011-07-17 18:12:05 【问题描述】:我有一个ListFragment
,它依赖于托管Activity
来正确初始化。第一次运行时,它加载正常。一旦我改变方向,我的应用程序就会崩溃。从堆栈跟踪中我可以看到不是我试图过早地添加Fragment
,而是android 试图恢复Fragment
。
我在onStart
方法中设置了setRetainInstance(false)
,但是一旦方向改变,我找不到任何方法来禁用Fragment
的恢复。有任何想法吗?我是否需要在我的应用被销毁之前删除Fragment
?
编辑:我最终延迟了初始化列表,直到 Activity 准备好。在设置适配器之前,Android 会方便地显示“正在加载”消息。
【问题讨论】:
【参考方案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 使用。” - 所以? “你的建议似乎没有冒犯的意思,相当笨拙。” - 我会对您当前的实施说同样的话。正如他们所说,美丽在旁观者的眼中。以上是关于避免Android在方向更改时自动重新添加我的片段的主要内容,如果未能解决你的问题,请参考以下文章