究竟如何实现Fragment交易?

时间:2016-11-17 12:43:57

标签: android android-fragments fragmenttransaction

在Android片段教程中,它明确指出"一旦活动达到恢复状态,您就可以自由地为活动添加和删除片段。

从技术上讲,这意味着我们应该在onResume回调期间或之后添加和删除(或替换我认为教程引用的事务)片段?

我很难理解上述陈述......

最重要的是我下载了样本" FragmentBasics.zip"检查代码。我发现活动在onCreate 方法上添加片段,因此在活动达到恢复状态之前。

发生了什么?

2 个答案:

答案 0 :(得分:0)

为避免活动状态丢失,需要确保在调用活动onSaveInstanceState不提交片段事务。 - 在onStop -

之后调用

您可以通过以下链接查看详细信息: http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html

从下面可以看出:

https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)

onRestoreInstanceState方法之后调用活动onStart。我想(顺便说一下,我不确定你在说什么教程,我只是在大声思考)当说“在Android片段教程中它明确指出”一旦活动达到恢复状态,您可以在活动中自由添加和删除片段。“您可以确定活动的状态已恢复。因此您可以添加/删除片段,但在onResume中添加或删除片段可能会导致其他一些问题。

我的建议只是检查savedInstanceState是否为null,而不是在活动的onCreate方法中进行操作。通过这种方法,我们检查是否存在要恢复的先前状态。调用onStop之后不要提交片段事务,这会导致IllegalStateException(例如,长时间运行后台任务的结果,例如异步任务。)

在这里您可以看到这里的官方示例: https://developer.android.com/training/basics/fragments/fragment-ui.html

答案 1 :(得分:-1)

当你在片段onCreate阶段添加片段时,android正在创建你的活动,当它完成时它会将该状态保存在super.onCreate(savedInstanceState);因此,最初的片段不应该是活动的一部分,因为它们是可变的。因此,理想情况下,你应该在onCreate阶段之后添加片段。     您也可以在onCreate阶段添加片段,但有时它会导致无法保存状态或泄露的窗口问题,从而避免它