0

I want to pass data dynamically from activity to fragment of the viewpager i have tried following solution from

Passing data beetwen fragments in viewpager

String tag = "android:switcher:" + R.id.pager + ":" + index;
Fragment f = getSupportFragmentManager().findFragmentByTag(tag);

This code works when I use ViewPger as FragmentPagerAdapter, I have a huge list of viewpager items and need to use FragmentStatePagerAdapter. getting fragment object as null while using FragmentStatePagerAdapter, what would be the best solution to pass data dynamically to fragments of a viewpager?

nayana bhoj
  • 115
  • 1
  • 11

1 Answers1

0

The listed code looks a bit hacky and might break under changes to android source code. I would recommend you to make your custom adapter saving list of fragments and using the getter method to access them later

    public class CustomAdapter extends FragmentStatePagerAdapter {

       SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
       private List<Fragment> fragmentList;

        public CustomAdapter(FragmentManager fm, List<Fragment> fragmentList) {
            super(fm);
            this.fragmentList = fragmentList;}



        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }


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

        @Override
        public int getCount() {
            return fragmentList.size();
        }


    }

finally, you can use your viewpager to get required fragment using:

Fragment fragment = mViewPagerAdapter.getRegisteredFragment(viewPager.getCurrentItem());
Bhagat
  • 80
  • 9