我对 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/

10-11 01:05