您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

好的建议:使用ConcatAdapter按顺序连接其他适配器。 {源码交易}

  • 时间:2022-08-12 01:05 编辑: 来源: 阅读:272
  • 扫一扫,手机访问
摘要:好的建议:使用ConcatAdapter按顺序连接其他适配器。 {源码交易}
链接:https://juejin.im/post/6891801164614991880作者:Android_ Developer ConcatAdapter是recyclerview: 1.2.0-alpha 04中提供的新组件,可以帮助我们将多个适配器按顺序组合起来,显示在同一个recyclerview中。 这允许您更好地封装适配器。 您不必将许多数据源组合到一个适配器中,从而降低了适配器的复杂性,并允许它们被重用。 例如,在列表的顶部和底部显示加载状态:当列表从网络中检索数据时,我们希望显示一个加载图标;如果有错误,我们将显示错误消息和重试按钮。 △一个有底部的RecyclerView,显示的是加载状态:加载进度或错误信息ConcatAdapter ConcatAdapter简介允许我们按顺序显示多个适配器的内容。 例如,假设我们有以下三个适配器:val First Adapter:First Adapter =…val Second Adapter:Second Adapter =…val Third Adapter:Third Adapter Adapter =…val Concat Adapter = Concat Adapter(第一个适配器,第二个适配器,第三个适配器)回收器视图. Adapter = concatadapterecycleview将按适配器的顺序显示所有项目。 使用不同的适配器可以让您更好地区分列表的各个部分。 例如,如果您想要显示一个标题,您可以将它封装在它自己的适配器中,而不会将标题的逻辑与解决列表显示的适配器混淆。 △ RecyclerView和适配器数据显示头部和底部的装载状态。我们可以在顶部或底部显示进度条或错误信息。 列表成功加载数据后,顶部或底部不应显示任何信息。 这样他们就可以用适配器实现0或1项的列表:valconcat adapter = concat adapter(表头适配器,列表适配器,表尾适配器)recycler view . Adapter = concat Adapter复制代码。如果头部和底部使用相同的布局、视图保持器和UI逻辑(例如,何时以及如何显示进度条),则只能实现一个适配器,然后创建两个实例:一个作为头部,一个作为底部。 完整的实现请看这里的pull请求,它增加了:从ViewModel公开的LoadState显示加载状态顶部和底部的布局,以及ListAdapter顶部和底部的ViewHolder对象,根据LoadState显示1或0项。每次LoadState发生变化,我们都会通知相应的项进行更改、插入或删除(可以查看pull请求中的相应代码)。 关于ConcatAdapter ViewHolder的更多信息默认情况下,每个适配器都维护自己的viewmoder池,适配器之间没有重用。 但是如果多个适配器使用同一个视图持有者,我们可能希望在适配器之间重用视图持有者的实例。 在构造ConcatAdapter时,我们可以使用ConcatAdapter.config对象来实现这种效果。 只需设置isolateViewTypes = false,所有合并的适配器就可以使用同一个视图池。 在显示顶部和底部装载状态的例子中,这两个视图持有者实际上使用了相同的内容,所以我们可以重用它们。 若要支持不同的视图持有者类型,您应该实现Adapter.getItemViewType方法。 当您重用ViewHodler时,请确保相同的视图类型不会对应不同的ViewHodler!防止此问题的最佳实践之一是将布局ID作为视图类型返回。 & lt!-版权所有2019 Google LLC。SPDX-License-Identifier:Apache-2.0->class header adapter():recycle view。适配器& ltloadingstateviewholder headerviewholder & gt;(){ override fun oncreateviewmolder(parent:view group,view type:Int):view holder { return LoadingStateViewHolder(parent)} override fun getItemViewType(position:Int):Int {-return 0+return r . layout . list _ loading } }类footer adapter():recycle view。适配器& ltLoadingStateViewHolderFooterViewHolder & gt;(){ override fun oncreateviewmolder(parent:view group,view type:Int):view holder { return LoadingStateViewHolder(parent)} override fun getItemViewType(position:Int):Int {-return 0+returnr . layout . list _ loading } }使用稳定id复制代码。与使用带有notifyDataSetChanged的稳定id相比,我们建议使用适配器的特定通知事件。该事件可以为recycle view提供更多关于数据集变化的信息,让recycle view更高效的升级UI,有更好的动画效果。 如果您使用的是ListAdapter,它将使用DiffUtil回调来帮助您解决通知事件。 但是如果需要使用稳定的id,ConcatAdapter。Config提供了三种不同的配置:NO_STABLE_IDS、ISOLATED_STABLE_IDS和SHARED_STABLE_IDS。 后两种需要你自己解决适配器中的稳定id。 您可以查看StableIdMode文档,了解有关它如何工作的更多信息。 数据更改通知当ConcatAdapter中的适配器调用通知函数时,ConcatAdapter将在升级RecyclerView之前计算新的项目位置。 从RecyclerView的角度来看,notifyItemRangeChanged表示升级后的项目是一样的,只是内容发生了变化;NotifyDataSetChanged表示前后的数据之间没有关系。 因此,我们不能将notifyDataSetChanged映射到notifyItemRangeChanged。 如果适配器调用适配器。NotfyDatasetChanged,ConcatAdapter也会调用Adapter。NotfyDatasetChanged,而不是Adapter.notifyItemRangeChanged。 与RecyclerViews一样,我们应该选择更精细的升级操作,并且通常避免调用Adapter.notifyDataSetChanged() 还可以使用自动执行此操作的适配器实现,如ListAdapter或SortedList。 找到取景框的位置。您可能已经使用了ViewHolder.getAdapterPosition来获取视图持有者在适配器中的位置。 现在,既然我们合并了多个适配器,相反,您需要调用view holder . getbindingadaterposition() 如果希望在共享视图持有者的同时获得绑定视图持有者的最后一个适配器,可以使用ViewHolder.getBindingAdapter() 上面也一样!总结一下:如果你想按顺序显示不同类型的数据,也想让这些数据封装在各自的适配器中,请开始使用ConcatAdapter;如果想进一步控制视图容器池和statle id,应该使用ConcatAdapter。配置 作者:Android_开发者链接:https://juejin.im/post/6891801164614991880来源:掘金版权归作者所有 商业转载请联系作者授权,非商业转载请注明出处。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【域名/主机/服务器|】qq邮箱提醒在哪里打开(2024-06-04 18:58)
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部