【问题标题】:getSupportFragmentManager().getFragments() deprecated?getSupportFragmentManager().getFragments() 已弃用?
【发布时间】:2017-08-10 22:11:02
【问题描述】:

我正在使用 viewpager 并编译 API 23。我在我的代码中显示以下语句的编译错误,但该项目确实编译。

List<Fragment> fragments = getSupportFragmentManager().getFragments();

此外,我在支持片段管理器和不支持片段管理器的 android 文档中都找不到此方法。有谁知道这里发生了什么?

【问题讨论】:

  • 对迈克尔的回答的第一条评论说明了一切......stackoverflow.com/questions/6102007/…We shouldn't use this method. It is marked with @hide and was not supposed to be included with the support library jar. It should not be considered part of the exported API.由于它被隐藏,我猜Google最终决定删除该方法。
  • 你使用了 import android.support.v4.app.Fragment; 吗?
  • 从支持库的 24.1.1 版开始,该方法尚未被弃用。究竟显示的错误是什么?
  • @Tanis.7x 无法解析方法。 (基本上只是在方法下加了一个红色下划线,但是项目编译好了。
  • @sonnv1368,是的,我做到了。

标签: android android-fragments


【解决方案1】:

我实际上这样做是为了获得对所有片段的引用:

private List<WeakReference<Fragment>> mFragList = new ArrayList<WeakReference<Fragment>>();

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

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

public Fragment findFragement(String tClass) {

    List<Fragment> fragments = getActiveFragments();
    for (Fragment fragment : fragments) {
        if (tClass.equalsIgnoreCase("Home")) {
            if (fragment instanceof ToggleFragment) {
                return fragment;

            }
        } else if (tClass.equalsIgnoreCase("Contacts")) {
            if (fragment instanceof ContactFragment) {
                return fragment;
            }
        }
    }
    return null;
}

【讨论】:

  • 非常感谢克里斯蒂!你是最棒的!另外,如果你能解释一下 getactivefragments 的作用,那就太棒了!
  • 也适用于:@Override public void onAttachFragment (Fragment fragment) { mFragList.add(new WeakReference(fragment));重新创建屏幕或使用 ft.replace() 时不会导致重复。
  • @MarissaNicholas 我认为重新创建屏幕时(如旋转)不会创建重复项。也许在 ft.replace() 上。
  • 你认为这样的事情会阻止这种情况发生吗? : @Override public void onAttachFragment(Fragment fragment) { for (WeakReference 参考 : mFragList) { if (reference instanceOf WeakRefence) { return; } mFragList.add(片段); } }
猜你喜欢
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多