FragmentManager:moveToState:GridFragment {...}的片段状态未更新为内联;预期状态1找到0

时间:2016-05-09 21:24:18

标签: android android-fragments

我有一个简单的活动和保留片段,就像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

我输入之间的奇怪警告在哪里?怎么处理呢?提前谢谢!

2 个答案:

答案 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

但似乎只是调查并与标签相关。该问题似乎已标记为未来版本已解决。但我不知道这是否会解决我们的用例。

希望这有助于解决问题。