在这个场景中,在一个Activity中实现了一个具有六个Fragment的ViewPager。片段之间的滑动被禁用,因此可以使用按钮来更改当前片段。向服务器发送 GET 请求,并在滑动完成后将响应数据显示在每个片段中。
第一种方法(使用 setUserVisibleHint)
最初, setUserVisibleHint 方法用于在片段变得可见时触发 GET 请求。然而,由于立即执行请求,这种方法导致滑动动画出现滞后。
第二种方法(使用 OnPageChangeListener)
克服动画滞后,一个 OnPageChangeListener 被添加到 ViewPager 中。此侦听器跟踪页面滚动状态,并在所需片段完全可见时(即滚动状态等于 IDLE)发送 GET 请求。
问题和解决方案
第二种方法效果很好,但是在执行sendGetRequest()时出现NullPointerException。这是因为没有正确获取片段引用。为了解决这个问题,有必要在 FragmentPagerAdapter 的 instantiateItem 方法中存储对片段的引用。然后,在 OnPageChangeListener 中,可以使用 ViewPagerPagerAdapter 中引用的片段,而不是创建新片段。
ViewPager2 的更新代码 (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()
}
}
}
)
这里,mAdapter指的是ViewPager2内部使用的FragmentPagerAdapter。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3