在此场景中,在 Activity 中实现了具有六个片段的 ViewPager。片段之间的滑动被禁用,因此可以使用按钮来更改当前片段。滑动完成后,向服务器发送 GET 请求,并在每个片段中显示响应数据。
第一种方法(使用 setUserVisibleHint)
最初, setUserVisibleHint 方法用于在片段变得可见时触发 GET 请求。然而,由于立即执行请求,这种方法导致了滑动动画的滞后。
第二种方法(使用 OnPageChangeListener)
克服动画滞后,一个 OnPageChangeListener 被添加到 ViewPager 中。此侦听器跟踪页面滚动状态,并在所需片段完全可见时(即滚动状态等于 IDLE)发送 GET 请求。
问题和解决方案
The第二种方法效果很好,但是在执行sendGetRequest()时出现NullPointerException。这是因为没有正确获取片段引用。为了解决这个问题,有必要在 FragmentPagerAdapter 的 instantiateItem 方法中存储对片段的引用。然后,在 OnPageChangeListener 中,可以使用 ViewPagerPagerAdapter 引用的片段,而不是创建新片段。
更新了 ViewPager2 (Kotlin) 的代码
<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>
这里的mAdapter指的是ViewPager2内部使用的FragmentPagerAdapter。
以上是如何从 Activity 访问和执行 ViewPager 片段中的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!