如何从ViewPager中引用某个片段

时间:2015-02-16 14:49:31

标签: android android-fragments android-studio

所以我试图通过使用我创建的接口在ViewPager(Swipe-tab)中组织的2个片段之间进行通信。像这样:

界面如下所示:

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

On 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? 我是初学者,所以我在网上搜索,但我不确定我在寻找什么,任何方向都会很好

提前致谢

1 个答案:

答案 0 :(得分:0)

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

要在使用ViewPager时获取片段的ID,我使用了此解决方案: Retrieve a Fragment from a ViewPager

基本上它会向你的自定义适配器覆盖另外两种方法,并添加另一种方法将这些项目作为片段:

   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);

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