热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android实现的RecyclerView适配器

这篇文章主要介绍了Android实现的RecyclerView适配器的相关资料,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

这个适配器我珍藏已久(近两年), 不断看到别人发适配器相关的文章, 但我总觉得没我的好用, 所以今日拿出来分享(宣传)一下, 欢迎各位指正不足.

源码地址: GitHub

功能

  • 无需继承 Adapter, 无需判断 item 类型.
  • 支持页头和页脚.
  • 支持自动展示空数据界面.
  • 通过 Kotlin 的 lambda 大量缩减代码.
  • 支持全局 Item 类型
  • 支持 diff 刷新

使用

添加依赖

implementation "com.dengzii.adapter:$latestVersion"

通过 lambda 快速使用, 这里就快速绑定了四种 item 的布局.

adapter.setEnableEmptyView(true, SuperAdapter.Empty())
adapter.addViewHolderForType(R.layout.item_empty){
 onBindData { _, _ -> 
  findView(R.id.bt_refresh).setOnClickListener { 
   // refresh your data
  }
 }
}
adapter.setHeader("This is header", R.layout.item_header) {
 onBindData { data, _ ->
  findView(R.id.tv_title).text = data
 }
}
adapter.setFooter(listOf("This", "is", "footer"), R.layout.item_section) {
 onBindData { data, _ ->
  findView(R.id.tv_title).text = data.joinToString(" ")
 }
}
adapter.addViewHolderForType(R.layout.item_header) {
 val title = findView(R.id.tv_title)
 val content by lazyFindView(R.id.tv_content)
 onBindData { data, _ ->
  title.text = data.title
  content.text = data.content
 }
}

或者不使用 lambda

val adapter = SuperAdapter(listOf("Item 1", "Item 2", "Item 3"))
adapter.addViewHolderForType(String::class.java, ItemViewHolder::class.java)
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = adapter

class ItemViewHolder(parent: ViewGroup) : AbsViewHolder(parent) {
 private lateinit var mTextView:TextView 
 override fun onCreate(parent: ViewGroup) {
  mTextView = TextView(context)
  mTextView.layoutParams = getLayoutParam(
      ViewGroup.LayoutParams.WRAP_CONTENT,
      ViewGroup.LayoutParams.WRAP_CONTENT
    )
  setContentView(mTextView)
 }

 override fun onBindData(data: String, position: Int) {
  mTextView.text = data
 }
}

无需继承 SuperAdapter, 但需要为每种 Item 实现并继承继承抽象类 AbsViewHolder, 并在改类中设置布局和绑定 View, 数据.

AbsViewHolder 代表一种 Item 类型, 其中泛型 T 为该 Item 对应的实体类

类 SuperAdapter 的作用

Adapter 构造器

public SuperAdapter(List data)

绑定 ViewHolder 到实体类型

public void addViewHolderForType(Class<&#63;> type, Class<&#63; extends AbsViewHolder> holder)

设置 Item 点击事件

 public void setOnItemClickListener(OnItemClickListener listener)
 
 public interface OnItemClickListener{
  void onItemClick(View v, Object itemData, int position);
 }

类 AbsViewHolder 的作用

每个 AbsViewHolder 表示一种 item 类型.

构造器, 必须重写带参数构造器, 否则无法使用, parent 与 Adapter#onCreateViewHolder 中 parent 一致

 public AbsViewHolder(@NonNull ViewGroup parent) 

创建 Item 时调用 onCreate 方法, 其中 parent 是该 item 的容器布局

 public abstract void onCreate(@NonNull ViewGroup parent);

绑定数据

public abstract void onBindData(@NonNull T data, int position);  

Sample

设置 Adapter

var data:List
...
val adapter = SuperAdapter(data)
// 绑定数据类到 ViewHolder
adapter.addViewHolderForType(Item::class.java, ItemViewHolder::class.java)
adapter.addViewHolderForType(Header::class.java, HeaderViewHolder::class.java)
adapter.addViewHolderForType(Section::class.java, SectionViewHolder::class.java)

adapter.setOnItemClickListener(object : SuperAdapter.OnItemClickListener {
 override fun onItemClick(v: View&#63;, itemData: Any&#63;, position: Int) {

 }
})

recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = adapter

继承 AbsViewHolder

class ItemViewHolder(parent: ViewGroup) : AbsViewHolder(parent) {
 private lateinit var mTvTitle: TextView
 private lateinit var mTvContent: TextView
 private lateinit var mIvImage:ImageView

 override fun onCreate(parent: ViewGroup) {
  setContentView(R.layout.item_item)
  mTvTitle = findViewById(R.id.tv_title)
  mTvCOntent= findViewById(R.id.tv_content)
  mIvImage = findViewById(R.id.iv_img)
 }

 override fun onBindData(data: Item, position: Int) {
  mTvTitle.text = data.title
  mTvContent.text = data.content
  mIvImage.setImageResource(data.img)
 }
}

以上就是Android实现的RecyclerView适配器的详细内容,更多关于RecyclerView 适配器的资料请关注其它相关文章!


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • (九)Docker常用安装
    一、总体步骤1、搜索镜像2、拉取镜像3、查看镜像4、启动镜像5、停止镜像6、移除镜像二、安装tomcat1、dockerhub上面查找tomcat镜像 dockersearchto ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
author-avatar
元元木樨_669
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有