【问题标题】:How can I return this fragment?我怎样才能返回这个片段?
【发布时间】:2016-07-14 20:33:50
【问题描述】:

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

【问题讨论】:

  • 代码在哪里,你累了吗?
  • 如果对您有帮助,请考虑接受答案

标签: android android-fragments


【解决方案1】:

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

正如didi_X8 所解释的here,您可以使用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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多