Access ViewPager Fragment Method from Activity
In your scenario, you have a ViewPager with multiple Fragment instances, and you want to perform a GET request and display the retrieved data in a Fragment when it becomes visible after swiping.
First Approach: setUserVisibleHint
Using setUserVisibleHint is not ideal because it triggers the request immediately when the Fragment becomes visible, interrupting the smooth animation of swiping.
Second Approach: OnPageChangeListener
OnPageChangeListener provides a more suitable approach. However, you encounter a NullPointerException when attempting to call sendGetRequest() in the onPageScrollStateChanged method.
Solution
The NullPointerException occurs because you are trying to use the context from the ViewPager's OnPageChangeListener within the Fragment. The context in this case is the MainActivity, which is not appropriate for the Fragment's operations.
To resolve this, you need to pass a reference to the Fragment's context instead. Here is the revised OnPageChangeListener:
<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { int currentPosition = 0; @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { currentPosition = position; } @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE && currentPosition != 0) { try { Fragment fragment = mAdapter.fragments[currentPosition]; if (fragment != null && fragment instanceof FragmentTwo) { ((FragmentTwo) fragment).sendGetRequest(); } } catch (Exception ex) { ex.printStackTrace(); } } } });</code>
In this code, we use the FragmentAdapter's fragments array to obtain a reference to the Fragment at the current position. We then cast the Fragment to the appropriate type (in this case, FragmentTwo) and call its sendGetRequest() method.
Using this approach, you can trigger the GET request and display the fetched data in the desired Fragment after the swiping animation completes smoothly.
The above is the detailed content of How to Call a Fragment Method from a ViewPager OnPageChangeListener Without a NullPointerException?. For more information, please follow other related articles on the PHP Chinese website!