我该如何归还这个片段?

时间:2016-07-14 11:54:57

标签: android android-fragments

我有一个(预先写好的)片段,访问为R.layout.myFragment。由于我必须将一个Fragment(也在预编写的代码中)传递给ViewPager中的FragmentPagerAdapter,我试图将其作为getFragmentManager().findFragmentById(R.layout.myFragment)传递,但它返回null,可能是因为它期望{{ {1}}。
我在这里找到了一些与实施谷歌地图片段有关的答案 - 但那些(我认为)不适用于我的问题,因为我必须以R.id.something的形式使用片段并且没有父/容器片段(或据我所知,类似的东西)使用FragmentTransaction 预计Fragment将在ViewPager的FragmentPagerAdapter的getItem()重写中返回。我怎样才能让碎片通过它来返回它?

1 个答案:

答案 0 :(得分:0)

有两种可能的解决方案。这两个都涉及遍历所有片段以找到您需要的片段。

正如here所解释的didi_X8,您可以使用Activity类的onAttachFragment方法创建所有附加片段的列表,然后迭代它们:

List<WeakReference<Fragment>> fragList = new ArrayList<WeakReference<Fragment>>();

@Override
public void onAttachFragment (Fragment fragment) {
    fragList.add(new WeakReference(fragment));
}

public List<Fragment> getActiveFragments() {
ArrayList<Fragment> ret = new ArrayList<Fragment>();
for(WeakReference<Fragment> ref : fragList) {
    Fragment f = ref.get();
    if(f != null) {
        if(f.isVisible()) {
            ret.add(f);
        }
    }
}
return ret;
}

另一个解决方案as explained by Michael将使用支持库并利用getFragments方法:

public List<Fragment> getVisibleFragments() {
List<Fragment> allFragments = getSupportFragmentManager().getFragments();
if (allFragments == null || allFragments.isEmpty()) {
    return Collections.emptyList();
}

List<Fragment> visibleFragments = new ArrayList<Fragment>();
for (Fragment fragment : allFragments) {
    if (fragment.isVisible()) {
        visibleFragments.add(fragment);
    }
}
return visibleFragments;
}