【问题标题】:Android - getSupportFragmentManager returns nullAndroid - getSupportFragmentManager 返回 null
【发布时间】:2015-08-30 16:24:44
【问题描述】:

我正在尝试使用它的标签获取片段的特定实例,但我使用的是 viewpager,这使事情变得困难。我用过:

public Fragment getFragmentByPosition(int pos) {
    String tag = "android:switcher:" + R.id.pager + ":" + pos;
    FragmentManager fragmentManager = this.getSupportFragmentManager();
    Fragment fragment = fragmentManager.findFragmentByTag(tag);
    return fragment;
}

要查找片段,但 getSupportFragmentManager 返回 null。

上面的方法在活动中,在viewpager适配器类之外,我很迷茫,不知道在这里做什么。任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 您使用的是 Fragment 还是支持 Fragment ?
  • 请发布您的完整活动课程
  • 我正在使用来自 v4 支持库的支持片段
  • 很遗憾,我不能发布完整的课程,因为我实际上不被允许。
  • 嗯,我想看看你在哪里使用这种方法。 FragmentManager 与 Activity 的生命周期密切相关,这就是为什么。而且由于您将其公开,因此您有机会在活动死亡时在某处使用它

标签: android android-fragments fragmentmanager


【解决方案1】:

您可以从这里使用 SmartViewPager https://gist.github.com/jacek-marchwicki/d6320ba9a910c514424d

从此类扩展您的视图寻呼机并使用 getActiveFragment 方法获取片段。您还可以更改此方法的实现以通过 TAG 名称获取您的片段。

public Fragment getActiveFragment(String name) {
    final Fragment fragmentByTag = fragmentManager.findFragmentByTag(name);
    if (fragmentByTag == null) {
        final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        fragmentManager.dump("", null, new PrintWriter(outputStream, true), null);
        final String s = new String(outputStream.toByteArray(), Charsets.UTF_8);
        throw new IllegalStateException("Could not find fragment via hacky way.\n" +
                "We were looking for name: " + name + "\n" +
                "Fragment with this name does not exists, or hack stopped working.\n" +
                "Current fragment manager dump is: " + s);
    }
    return fragmentByTag;
}

【讨论】:

  • 看到问题是我什至无法获得片段管理器,所以这不起作用。我仍然需要在这里给它片段管理器,并且由于 getSupportFragmentManager() 不起作用,这也不会......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多