Home  >  Article  >  Java  >  How to Call Methods in ViewPager Fragments from Activity?

How to Call Methods in ViewPager Fragments from Activity?

DDD
DDDOriginal
2024-11-03 09:13:02858browse

How to Call Methods in ViewPager Fragments from Activity?

Calling 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

  1. setUserVisibleHint(): Initially used but resulted in lag when animations were involved.
  2. 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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn