我相对较新的Android,为了检查片段是否已经在堆栈中我从FragmentManager获取片段列表,稍后迭代列表并检查那里的片段是否会相应地加载。当我在下面的代码片段中检查片段的名称时,问题是获得NPE,即使在进行空检查之后也是如此。任何想法....请帮助。
if (null != frags) {
for (int i = 0; i <frags.size(); i++) {
if (frags.get(i).getClass().getName() == backStateName) {// NPE at getclass while juggling fragments in and out of the stack
Fragment frag = frags.get(i);
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.event_frame, frag);
ft.commit();
return;
}
}
}
答案 0 :(得分:6)
ArrayList
可以包含空条目。
使用支持库的FragmentManager实现,永远不会从活动片段列表中删除片段。相反,their position in the ArrayList is simply set to null。
因此,当您遍历getFragments()
返回的活动片段列表时,您应该进行空检查,因为它们中至少有一个是空的。
答案 1 :(得分:0)
试试这个:
getSupportFragmentManager().getFragments().removeAll(Collections.singleton(null));
它将删除所有空条目