In the context of a ViewPager with disabled finger swiping, the question arose on how to trigger data fetching requests in individual fragments once they become visible after swiping with dedicated buttons.
Initial Approaches
Problem
However, calling the sendGetRequest() method from the fragment within the OnPageChangeListener() led to a NullPointerException.
Solution
To resolve the issue and maintain fragment references, the adapter needed to be refactored.
PagerAdapter with Fragment References
Introduce a PagerAdapter that holds references to each fragment:
<code class="java">class PagerAdapter extends FragmentPagerAdapter { public Fragment[] fragments; // Instantiate fragments and add to array @Override public Object instantiateItem(ViewGroup container, int position) { Fragment createdFragment = (Fragment) super.instantiateItem(container, position); fragments[position] = createdFragment; return createdFragment; } }</code>
Accessing Fragment from Activity
Then, in the activity, instead of creating a new fragment, use the referenced one:
<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { Fragment frag = mAdapter.fragments[position]; if (frag != null && frag instanceof FragmentTwo) { ((FragmentTwo)frag).sendGetRequest(); } } });</code>
ViewPager2 and Kotlin
For ViewPager2 and Kotlin, the solution is similar:
<code class="kotlin">viewPager.registerOnPageChangeCallback( object: ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { super.onPageSelected(position) val frag: Fragment = mAdapter.fragments[position] if (frag != null && frag is FragmentTwo) { (frag as FragmentTwo).sendGetRequest() } } } )</code>
Note: If using different fragment classes, consider implementing an interface with the sendGetRequest() method and implementing it in each fragment for a cleaner solution.
The above is the detailed content of How to Call Methods in ViewPager Fragments from Activity?. For more information, please follow other related articles on the PHP Chinese website!