我对 Android 比较陌生,为了检查 fragment 是否已经在堆栈中,我从 FragmentManager 获取 fragment 列表,稍后迭代列表并检查是否存在 fragment ,然后我将相应地加载它。问题是即使在进行空检查后,当我在下面的代码段中检查 fragment 名称时也会得到 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;
}
}
}
最佳答案
ArrayList
可以包含空条目。
使用支持库的 FragmentManager 实现,Fragment 永远不会从 Activity Fragment 列表中删除。相反, their position in the ArrayList is simply set to null 。
因此,当您遍历 getFragments()
返回的 Activity Fragment 列表时,您应该进行空检查,因为其中至少有一个为空的可能性相当大。
关于java - FragmentManager.getFragmens().size() 返回不一致的大小;,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38206620/