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

时间:2017-03-16 07:35:09

标签: android android-viewpager

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

编辑:

View view = viewPager.getChildAt(viewPager.getCurrentItem());

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

1 个答案:

答案 0 :(得分:2)

您需要访问Fragments中使用的ViewPager

在这个回答https://stackoverflow.com/a/39274141/1559852中,我尝试解释如何修改ViewPager's适配器o使您在ViewPager中使用的片段可以访问。

在链接中实现代码后,您将能够访问您的片段及其观看次数。

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

public View getMyFragmentView(){
     return this.mView();
}

最后在OnPageChangeLsitener添加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适配器中,您可以将Fragment注册到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;
}