gpt4 book ai didi

androidx - 使用ViewPager2时如何实现延迟加载?

转载 作者:行者123 更新时间:2023-12-05 07:23:52 27 4
gpt4 key购买 nike

我正在将我的代码更改为 androidX,我以前在 viewpager 中存储片段,每个片段包含多个列表,现在我在使用 viewpager2 时遇到延迟加载的问题,是否有来自 google 的示例代码?

最佳答案

试试这个

abstract class LazyFragment : Fragment() {

private var isInitData : Boolean = false // flag bit to determine whether the data is initialized
private var isVisibleToUser : Boolean = false // flags to determine whether fragments are visible
private var isPrepareView : Boolean = false // flag bit to determine that view has been loaded to avoid null pointer operations

override fun onViewCreated(@NonNull view: View, @Nullable savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
isPrepareView = true // At this point the view has been loaded and set to true
}


override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
if (!hidden) {
lazyInitData()
}
}


override fun onResume() {
super.onResume()
isVisibleToUser = true
lazyInitData() // Load lazily
}

override fun onPause() {
super.onPause()
isVisibleToUser = false
}

override fun onAttach(context: Context) {
super.onAttach(context)
lazyInitData() // Load lazily
}

//


/**
* Lazy Loading Method
*/
private fun lazyInitData(){
if(setFragmentTarget()){
if(!isInitData && isVisibleToUser && isPrepareView) {
loadData()
}
}else {
if(!isInitData && isVisibleToUser && isPrepareView) {
loadData()
}else if (!isInitData && parentFragment ==null && isPrepareView ){
loadData()
}
}
}

private fun loadData() {
initData(); // Load data
isInitData = true; // Has the data flag been loaded and reassigned to true
}


/**
* Method of loading data, implemented by subclasses
*/
abstract fun initData()

/**
* Setting Fragment target, implemented by subclasses
*/
abstract fun setFragmentTarget(): Boolean

你需要做的是这个

(对于您在 ViewPager2 中使用的每个片段,使片段扩展 LazyFragment):

  1. 重写 onCreateView() 以膨胀布局
  2. 覆盖 setFragmentTarget (),它根据您是希望立即加载还是延迟加载该片段返回 true 或 false
  3. 覆盖 initData() 并将您的逻辑放入其中

关于androidx - 使用ViewPager2时如何实现延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55726371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com