Android如何实现RecyclerView适配器

  介绍

这篇文章主要讲解了“Android如何实现RecyclerView适配器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android如何实现RecyclerView适配器”吧!

源码地址:GitHub

功能

<李>

无需继承适配器,无需判断项目类型。

<李>

支持页头和页脚。

<李>

支持自动展示空数据界面。李李

<>

通过芬兰湾的科特林的λ大量缩减代码。李李

<>

支持全局项目类型

<李>

支持diff刷新

使用

添加依赖

implementation “com.dengzii.adapter: latestVersion"美元;

通过λ快速使用,这里就快速绑定了四种产品的布局。

 adapter.setEnableEmptyView(真的,,SuperAdapter.Empty ())
  adapter.addViewHolderForType (R.layout.item_empty) {
  {,onBindData , _, _ →,
  findView<才能;View> (R.id.bt_refresh) .setOnClickListener  {,
  ,,//refresh  your 数据
  ,,}
  ,}
  }
  adapter.setHeader(“却;能够is  header",, R.layout.item_header), {
  {,onBindData ,数据,_ →
  findView<才能;TextView> (R.id.tv_title) .text =数据
  ,}
  }
  adapter.setFooter(自然(“This",,“女儿,,,“footer"),, R.layout.item_section), {
  {,onBindData ,数据,_ →
  findView<才能;TextView> (R.id.tv_title) .text =, data.joinToString (“,“)
  ,}
  }
  adapter.addViewHolderForType
(R.layout.item_header), {   ,val  title =, findView (R.id.tv_title)   ,val  content  by  lazyFindView< TextView> (R.id.tv_content)   {,onBindData ,数据,_ →   title.text 才能=data.title   content.text 才能=data.content   ,}   }

或者不使用λ

val  adapter =, SuperAdapter(自然(“Item  1“,“Item  2,,,“Item  3,))   adapter.addViewHolderForType(字符串::class.java, ItemViewHolder:: class.java)   时间=recyclerView.layoutManager  LinearLayoutManager(这)   时间=recyclerView.adapter 适配器      class  ItemViewHolder(父:ViewGroup),:, AbsViewHolder(父),{   ,private  lateinit  var  mTextView: TextView    ,override  fun  onCreate(父:,ViewGroup), {   时间=mTextView 才能;TextView(上下文)   时间=mTextView.layoutParams 才能;getLayoutParam (   ,,,,,ViewGroup.LayoutParams.WRAP_CONTENT,   ,,,,ViewGroup.LayoutParams.WRAP_CONTENT   ,,,)   ,,setContentView (mTextView)   ,}      ,override  fun  onBindData(数据:字符串,位置:,Int), {   时间=mTextView.text 才能;数据   ,}   }

无需继承SuperAdapter,但需要为每种物品实现并继承继承抽象类AbsViewHolder,并在改类中设置布局和绑定看来,数据。

AbsViewHolder代表一种物品类型,其中泛型T为该项目对应的实体类

类SuperAdapter的作用

适配器构造器

public  SuperAdapter (Object> List<数据)

绑定ViewHolder到实体类型

public  void  addViewHolderForType (Class<?祝辞,类型,Class<?, extends  AbsViewHolder>,持有人)

设置项点击事件

, public  void  setOnItemClickListener (OnItemClickListener 侦听器)   ,   ,public  interface  OnItemClickListener {   void 才能;onItemClick (View  v, Object  itemData,, int 位置);   以前,}

类AbsViewHolder的作用

每个AbsViewHolder表示一种物品类型。

构造器,必须重写带参数构造器,否则无法使用,父母与适配器# onCreateViewHolder中父一致

, public  AbsViewHolder (@NonNull  ViewGroup 父母)

创建项目时调用>,public  abstract  void  onCreate (@NonNull  ViewGroup 父);

绑定数据

public  abstract  void  onBindData (@NonNull  T 数据,int 位置),

示例

设置适配器

var 数据:List   …   val  adapter =, SuperAdapter(数据)//,绑定数据类到,ViewHolder   adapter.addViewHolderForType(项目::class.java, ItemViewHolder:: class.java)   adapter.addViewHolderForType(标题::class.java, HeaderViewHolder:: class.java)   adapter.addViewHolderForType(部分::class.java, SectionViewHolder:: class.java)      adapter.setOnItemClickListener (object : SuperAdapter.OnItemClickListener  {   ,override  fun  onItemClick (v:视图?,,itemData:,吗?,,位置:,Int), {      ,}   })      时间=recyclerView.layoutManager  LinearLayoutManager(这)   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Android如何实现RecyclerView适配器