【问题标题】:How do I reference a certain fragment from my ViewPager如何从我的 ViewPager 中引用某个片段
【发布时间】:2015-02-16 14:49:30
【问题描述】:

所以我试图通过使用我创建的界面在 ViewPager(滑动选项卡)中组织的 2 个片段之间进行通信。像这样:

界面如下:

    public interface Communicator {
        public void respond(String data);
    }

在 Fragment A 上,我引用了称为“comm”的接口, FragmentA 的 onClick 是这样的:

    comm = (Communicator) getActivity();
    comm.respond("String being passed");

但是 - 当我回到响应覆盖方法中的主要活动时,我尝试引用我的片段并得到 nullPointer 异常:

    FragmentManager manager = getSupportFragmentManager();
    FragmentB fragB = (FragmentB) manager.findFragmentById(R.id.fragmentB);

也许我在 XML 文件中以错误的方式声明了片段的 ID? 我是初学者,所以我在网上搜索,但我不确定我在寻找什么,任何方向都会很好

提前致谢

【问题讨论】:

  • 请添加您的 xml 文件和 LogCat

标签: android android-fragments android-studio


【解决方案1】:

所以我解决了,我的问题正如@CurlyCorvus 所说。

为了在使用 ViewPager 时获取 Fragment 的 ID,我使用了以下解决方案: Retrieve a Fragment from a ViewPager

基本上它说要像这样为您的自定义适配器覆盖另外 2 个方法,并添加另一种方法来将项目作为片段:

   SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();

@Override
public Object instantiateItem(ViewGroup container, int position) {
    Fragment fragment = (Fragment) super.instantiateItem(container, position);
    registeredFragments.put(position, fragment);
    return fragment;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    registeredFragments.remove(position);
    super.destroyItem(container, position, object);
}
public Fragment getRegisteredFragment(int position) {
    return registeredFragments.get(position);
}

在我的方法中,我这样引用我的片段:

 FragmentB fragB = (FragmentB) ((myAdapter) viewPager.getAdapter()).getRegisteredFragment(1);

我的片段不再为空,界面正常,我可以在两个片段之间传递数据,感谢您的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多