How to Call Methods in ViewPager Fragments from Activity?
Nov 03, 2024 am 09:13 AMCalling ViewPager Fragment Methods from Activity
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
- setUserVisibleHint(): Initially used but resulted in lag when animations were involved.
- OnPageChangeListener(): Better approach that monitors page changes successfully.
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 &amp;&amp; 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 &amp;&amp; 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!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Top 4 JavaScript Frameworks in 2025: React, Angular, Vue, Svelte

How does Java's classloading mechanism work, including different classloaders and their delegation models?

How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?

Node.js 20: Key Performance Boosts and New Features

Iceberg: The Future of Data Lake Tables

Spring Boot SnakeYAML 2.0 CVE-2022-1471 Issue Fixed

How can I implement functional programming techniques in Java?

How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?
