我使用一個持有片段的活動,在該片段中,我有一個持有ViewPagger2的其他片段,現在當應用程式打開時,它應該顯示ViewPagger2的第一個孩子,并且只顯示該資料,但它沒有發生,它加載了兩個孩子,使我的應用程式很慢,如何解決這個問題。
uj5u.com熱心網友回復:
將你的資料加載放在Fragment的onResume方法中,因為Viewpager2只在Fragment被顯示時才恢復。
這將保持Fragment的封裝,但實作了與在OnPageChangeCallback中做同樣的目標。
uj5u.com熱心網友回復:
這是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陳述句。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/328861.html
標籤:
上一篇:服務器客戶端發送/接收多個客戶端
下一篇:Kotlin/Android/OpenGLES:無法使用法線實作3D照明。想要的索引。4294967295.最大索引。16
