Android 获取Viewpager中当前选定项目的子视图

Android 获取Viewpager中当前选定项目的子视图,android,android-viewpager,Android,Android Viewpager,当我在viewpager中从项目0到项目2获得子视图时,它可以正常工作。当我尝试从3开始获取子视图时,它返回null。如何获取viewpager的所有当前选定子视图 编辑: 当viewPager.getCurrentItem()达到3之后,视图返回null。您需要访问viewPager中使用的片段 在这个回答中,我试图解释如何修改ViewPager的适配器,使ViewPager中使用的片段可以访问 在link中实现代码后,您将能够访问片段及其视图 为片段定义一个公共方法,如下所示: public

当我在viewpager中从项目0到项目2获得子视图时,它可以正常工作。当我尝试从3开始获取子视图时,它返回null。如何获取viewpager的所有当前选定子视图

编辑:


当viewPager.getCurrentItem()达到3之后,视图返回null。

您需要访问
viewPager中使用的
片段

在这个回答中,我试图解释如何修改
ViewPager的
适配器,使
ViewPager中使用的片段可以访问

在link中实现代码后,您将能够访问片段及其视图

为片段定义一个公共方法,如下所示:

public View getMyFragmentView(){
     return this.mView();
}
最后,将一个
onpagechangelistener
添加到您的
ViewPager
中,如下代码所示

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            // Here's your instance
            final YourFragment fragment =(YourFragment)yourPagerAdapter.getRegisteredFragment(position); 
            final View theViewYouWantToAccess = yourFragment.getMyView();

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
编辑:在您的ViewPager适配器中,您可以将
片段
注册到
SparseArray

@Override
public Fragment getItem(int position) {
     final YourFragment fragment = new YourFragment();

     // Register your fragment to Sparse Array here
     registeredFragments.put(position, fragment);

     return fragment;
}

你能发布你用来澄清问题的代码吗?你在viewpager中加载了多少片段?@Jaydeppatel 5这可能会对你有所帮助。我想你试图获取的视图还没有加载。您可以使用
ViewPager
void setOffscreenPageLimit(int limit)
方法设置当前页面任一侧内存中保留的页面数。感谢您的回复。但是我怎样才能先将我所有的碎片送入sparseArray?你不需要这个。在适配器的getItem方法中返回新片段时,只需将其添加到稀疏数组中。我会编辑我的答案。谢谢你,我会尝试一下=)这会有用的。如果你有问题,请让我知道,以帮助你。如果行得通,我很高兴你能接受我的回答。谢谢
@Override
public Fragment getItem(int position) {
     final YourFragment fragment = new YourFragment();

     // Register your fragment to Sparse Array here
     registeredFragments.put(position, fragment);

     return fragment;
}