我有一个简单的活动和保留片段,就像Alex Lockwood blog post example一样。
我的活动在onCreate()
内发布:
FragmentManager fm = getSupportFragmentManager();
retainedFragment = (GridFragment) fm.findFragmentByTag(RETAINED_FRAGMENT_TAG);
// If the Fragment is non-null, then it is currently being
// retained across a configuration change.
if (retainedFragment == null) {
retainedFragment = new GridFragment();
fm.beginTransaction().add(retainedFragment, RETAINED_FRAGMENT_TAG).commit();
}else{
list = retainedFragment.getList();
System.out.println(list.size());//OUTPUT 12
}
我的Fragments
' onAttach()
是:
@Override
public void onAttach(Context activity) {
super.onAttach(activity);
mCallbacks = (TaskCallbacks) activity;
System.out.println("here"); //OUTPUT here
}
现在,在每个屏幕旋转中,我都有非常奇怪的输出:
I / System.out:here
W / FragmentManager:moveToState:片段状态为 GridFragment {95fc9db#0 retained_tag}未内联更新;预期 状态1找到0
I / System.out:12
我输入之间的奇怪警告在哪里?怎么处理呢?提前谢谢!
答案 0 :(得分:8)
此消息无关紧要,并且在支持库v24.0.0中删除了额外的日志 这是官方开发者answer:
好奇的是,FragmentManager.moveToState现在更新了新的 片段状态,因为它去,而不是在所有的结束后 国家变革阶段已经完成。这固定了几个有趣的 使用子片段管理器和 从一个父片段中执行executePendingTransactions 生命周期回调。
我们带来片段的状态转换之一是a no-op没有让状态更新内联,以及你所记录的日志 看到宣布我们在最后完成它,就像我们一样 会有23.2之前。
答案 1 :(得分:2)
我从几天前从支持库appcompat-v7 23.1.1迁移到23.4.0时发现了相同的行为。
似乎错误出现在较新的支持库中。用23.1.1我没有错误。经过一段时间的调查,我可以看到错误是在23.2.0中引入的。
如果您可以回到23.1.1,则警告不会出现。
这里提到类似的问题: https://code.google.com/p/android/issues/detail?id=202037
但似乎只是调查并与标签相关。该问题似乎已标记为未来版本已解决。但我不知道这是否会解决我们的用例。
希望这有助于解决问题。