FragmentManager.getFragmens()。size()返回不一致的大小;

时间:2016-07-05 14:54:48

标签: java android android-fragments

我相对较新的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;
            }
        }
    }

2 个答案:

答案 0 :(得分:6)

ArrayList可以包含空条目。

使用支持库的FragmentManager实现,永远不会从活动片段列表中删除片段。相反,their position in the ArrayList is simply set to null

因此,当您遍历getFragments()返回的活动片段列表时,您应该进行空检查,因为它们中至少有一个是空的。

答案 1 :(得分:0)

试试这个:

getSupportFragmentManager().getFragments().removeAll(Collections.singleton(null));

它将删除所有空条目