3

When I get a child view from items 0 to 2 in viewpager, it works fine. When I try to get a child view from 3 onward, it returns null. How can I get all the current selected child view of viewpager?

Edited:

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

When viewPager.getCurrentItem() reached 3 onward, the view return null.

Wei Long
  • 65
  • 2
  • 10

1 Answers1

2

You need to access the Fragments which you use in your ViewPager.

In this answer https://stackoverflow.com/a/39274141/1559852 i tried to explain how to modify your ViewPager's adapter o make the fragments which you use in your ViewPager accessible.

After you implemented the code in link, you'll be able to access your fragments and it's views.

Define a public method to your Fragments like below:

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

Finally add an OnPageChangeLsitener to your ViewPager like the following code.

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

        }
    });

Edit: In your ViewPager adapter you can register the Fragment to 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;
}
Community
  • 1
  • 1
savepopulation
  • 11,736
  • 4
  • 55
  • 80