从 Activity 访问 ViewPager Fragment 方法
在您的场景中,您有一个具有多个 Fragment 实例的 ViewPager,并且您想要执行 GET请求并在 Fragment 滑动后可见时显示检索到的数据。
第一种方法:setUserVisibleHint
使用 setUserVisibleHint 并不理想,因为它会在以下情况立即触发请求Fragment 变得可见,中断了平滑的滑动动画。
第二种方法:OnPageChangeListener
OnPageChangeListener 提供了更合适的方法。但是,当您尝试在 onPageScrollStateChanged 方法中调用 sendGetRequest() 时,会遇到 NullPointerException。
解决方案
发生 NullPointerException 是因为您尝试使用来自Fragment 内的 ViewPager 的 OnPageChangeListener。本例中的上下文是 MainActivity,它不适合 Fragment 的操作。
要解决此问题,您需要传递对 Fragment 上下文的引用。下面是修改后的 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>
在这段代码中,我们使用 FragmentAdapter 的fragments 数组来获取对当前位置的 Fragment 的引用。然后,我们将 Fragment 转换为适当的类型(在本例中为 FragmentTwo)并调用其 sendGetRequest() 方法。
使用此方法,您可以触发 GET 请求并在所需的 Fragment 中显示获取的数据滑动动画顺利完成。
以上是如何从 ViewPager OnPageChangeListener 调用 Fragment 方法而不出现 NullPointerException?的详细内容。更多信息请关注PHP中文网其他相关文章!