View Pagger 同时加载两个 child 数据

View Pagger loads two child data at same time

我使用一个 Activity 在该片段中保存一个片段 我现在有另一个片段保存 ViewPagger2 当应用程序打开时它应该首先显示 ViewPagger2 的 child 并且也只加载该数据但是它没有发生加载两个 child 使我的应用变慢如何解决这个问题。

加载相邻页面以获得更流畅的动画是 viewPager2 的默认行为。但是您可以使用 viewpager2 setOffscreenPageLimit 方法覆盖默认的屏幕外页面限制。

在 kotlin 中使用

viewPager2.offscreenPageLimit = PAGE_COUNT

这将提前加载指定数量的页面。但是,这个 PAGE_COUNT 不能小于 1 这意味着,它仍然会加载你的第二个片段。但是,它不应该像您提到的那样减慢您的应用程序。

如果您正在执行任何网络请求,那么您可以为 viewPager2 设置 registerOnPageChangeCallback 并覆盖 onPageSelected,然后仅在选择该片段时执行网络请求。

因为 onPageSelected(position: Int) 只给我们选择页面的位置,而不是片段本身,所以我们必须使用 childFragmentManager 检索选择的片段,然后触发我们的网络加载请求。

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
            override fun onPageSelected(position: Int) {
                super.onPageSelected(position)
                if (childFragmentManager.fragments.size > position) {
                    if(position == 1) { // for second fragment
                        val fragment = childFragmentManager.fragments[position] as SecondFragmentClassName
                        fragment.loadNetworkData()
                    }
                }
            }
        })

对于多个片段,您可以相应地使用 when 语句。

将您的数据加载到 Fragment 的 onResume 方法中,因为 Viewpager2 仅在显示时恢复 Fragment。

这保持了 Fragment 的封装,但实现了与在 OnPageChangeCallback 中执行相同的目标。