Android环境中如何使用喷气背包——分页

  

Android环境中如何使用喷气背包——分页?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

谷歌推出Jetpack组件化已经有相当一段时间了。各种组件也层出不穷。

,,,,Jetpack的东西也不少,

,,,, Android环境中如何使用喷气背包——分页”> </p> <p>,,,,今天就搞一下这个,<强>分页</强> </p> <p>,,,,分页</强>的<>强出现,就是用作列表的分页加载。其实现在已经有非常多成熟高效的开源列表加载控件了,比如:Smartrefreshlayout等。但谷歌推出的,必然有它的有点,当然也有它的局限性。</p> <p>,,,,先说优点吧,<强>分页</强>的使用,需要配合ViewModle, LiveData等控件,数据的请求感知并绑定页面的生命周期,避免了内存泄漏。还需要绑定数据源和数据源的工厂,能无痕加载更多数据,一定程度上提高用户体验。</p> <p>,,,主要流程是:</p> <p>,,,,1:自定义PositionalDataSource,里面的功能是进行数据分页请求。</p> <p>,,,,2:自定义的数据源。工厂,把PositionalDataSource绑定LiveData </p> <p>,,,,3:活动自定义ViewModel,把PositionalDataSource和工厂绑定,让ViewModel感知数据的变化,</p> <p>,,,,4:ViewModel感知数据的变更,并更新,PagedListAdapter的submitList . </p> <p>最先看看导入那些依赖:</p> <pre class=实现“androidx.paging: paging-runtime: 3.0.0-alpha04"   实现& # 39;androidx.recyclerview: recyclerview: 1.1.0 # 39;   实现& # 39;com.squareup.retrofit2:改造:2.9.0& # 39;   实现“android.arch.lifecycle:扩展:1.1.1"

【1】先看活动代码:,

类MainActivity: AppCompatActivity () {
  
  
  覆盖乐趣>类MyPagedListAdapter延伸PagedListAdapter{
  
  
  私有静态DiffUtil.ItemCallbackDIFF_CALLBACK=新的DiffUtil.ItemCallback () {
  @Override
  公共布尔areItemsTheSame (MyDataBean oldConcert, MyDataBean newConcert) {//比较两个条目数据是否一样的,可以简单用Bean的hashCode来对比
  返回oldConcert.hashCode ()==newConcert.hashCode ();
  }
  
  @Override
  公共布尔areContentsTheSame (MyDataBean oldConcert,
  MyDataBean newConcert) {//写法基本上都这样写死即可
  返回oldConcert.equals (newConcert);
  }
  };
  
  
  公共MyPagedListAdapter () {//通过构造方法设置DiffUtil.ItemCallback
  超级(DIFF_CALLBACK);
  }
  
  @NonNull
  @Override
  公共MyViewHolder>类MyViewHolder (val itemV:查看):RecyclerView.ViewHolder (itemV) {
  
  乐趣bindData(数据:MyDataBean) {
  itemV.findViewById (R.id.tvNum)。文本=data.position.toString ()
  
  如果(数据)。位置% 2==0){
  itemV.findViewById (R.id.tvNum) .setBackgroundColor (itemV.context.resources.getColor (R.color.colorAccent))
  其他}{
  itemV.findViewById (R.id.tvNum) .setBackgroundColor (itemV.context.resources.getColor (R.color.colorPrimaryDark))
  }
  }
  }

MyDataBean:

数据类MyDataBean (val位置:Int) 

,【3】看数据源代码:

PositionalDataSource,里面的功能是进行数据分页请求。

需要实现两个方法:

<强> loadInitial() :第一次打开页面,需要回调此方法来获取数据

<强> loadRange(): ,当有了初始化数据之后,滑动的时候如果需要加载数据的话,会调用此方法。

类一个:PositionalDataSource () {/* *
  *第一次打开页面,需要回调此方法来获取数据
  * */覆盖乐趣loadInitial (params: LoadInitialParams,回调:LoadInitialCallbackAndroid环境中如何使用喷气背包——分页