0

Before I migrate to viewPager2, I get current fragment at this way to use methods inside it:

Fragment myFragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, viewPager.getCurrentItem());

But, now I get an error on instantiateItem:

Cannot resolve method 'instantiateItem(androidx.viewpager2.widget.ViewPager2, int)'

I don't use Tag to create Fragments in ViewPager Adapter:

    private class MyPagerAdapter extends FragmentStateAdapter {

    public MyPagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return ScreenFragment.newInstance(position);
    }

    @Override
    public int getItemCount() {
        return 5;
    }
}

So, How I can get the current fragment in viewPager2?

Marlen Schreiner
  • 726
  • 10
  • 25

3 Answers3

1

You can use HashMap to do this:

private HashMap<Integer, Fragment> hashMap = new HashMap<>();
@Override
public Fragment createFragment(int position) {
     Fragment fragment = ScreenFragment.newInstance(position);
     hashMap.put(position, fragment);
     return fragment;
}

And then get current fragment at this way:

ScreenFragment screenFragment = (ScreenFragment) hashMap.get(viewPager.getCurrentItem());
Sajjad javadi
  • 393
  • 1
  • 6
1

Perfect and easy solution by @Zain.

just want to add a little more:

You have to call childFragmentManager through your activity fragment manager instance.

SupportFragmentManager.Fragments[0].ChildFragmentManager.Fragments[0];
Avii
  • 25
  • 5
0

Maybe an easier way with ViewPager2 is to do something like

childFragmentManager.fragments[viewPager.currentItem - 1]

This will give you access to the current fragment.

Zain
  • 2,336
  • 1
  • 16
  • 25