FragmentManager getFragments返回null

时间:2014-11-14 15:20:06

标签: android android-fragments android-support-library

我需要一些帮助来理解FragmentTransactions和FragmentManager的底层。每当我重新创建活动时,在配置更改(屏幕旋转)和调用

后,我都会抛出NPE
    List<Fragment> fragments = getSupportFragmentManager().getFragments();
    boolean pending = getSupportFragmentManager().executePendingTransactions();
    Log.d(LOG_TAG, "Any pending : " + Boolean.toString(pending));
    Log.d(LOG_TAG, "Size : " + Integer.toString(fragments.size()));
    for(Fragment fragment : fragments){
        if(fragment != null & fragment.isVisible()){
            Log.d(LOG_TAG, "Fragment Tag : " + fragment.getTag());
        }
    }

示例输出如下所示

11-14 10:17:42.806: D/MainActivity(1825): Any pending : false
11-14 10:17:42.806: D/MainActivity(1825): Size : 3

stacktrace在下面一行打印一个NPE,因为Fragment为空。

if(fragment != null & fragment.isVisible()){

这是我的困惑。在重新创建活动之前,我在管理器中有两个片段。我附上第三个片段,然后将其删除,让我回到应该是两个片段。但是,经理说这个列表中有三个片段。为什么是这样?我可以看到删除的片段通过它的onDestroy()。经理是否保留片段的空引用?

1 个答案:

答案 0 :(得分:3)

list.size()还会计入null个条目。

所以这个

ArrayList<String> entries = new ArrayList<String>();
entries.add(null);
Log.d("HomeFragment", "Entries " + entries.size());

打印出来:

HomeFragment  D  Entries 1