我需要一些帮助来理解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()。经理是否保留片段的空引用?
答案 0 :(得分:3)
list.size()
还会计入null
个条目。
所以这个
ArrayList<String> entries = new ArrayList<String>();
entries.add(null);
Log.d("HomeFragment", "Entries " + entries.size());
打印出来:
HomeFragment D Entries 1