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 中执行相同的目标。
我使用一个 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 中执行相同的目标。