Kotlin 语言的直接考这四个类直接拿来用就可以了
RecyclerBaseAdapter 类
package com.xxxx.pad.base.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
/**
* Created by yao on 2022/7/11.
* Describe
*/
//循环视图基础适配器
abstract class RecyclerBaseAdapter<VH : RecyclerView.ViewHolder>(val context: Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>(),
OnItemClickListener,
OnItemLongClickListener {
val inflater: LayoutInflater = LayoutInflater.from(context)
//获得列表项的个数,需要子类重写
override abstract fun getItemCount(): Int
//根据布局文件创建视图持有者,需要子类重写
abstract override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder
//绑定视图持有者中的各个控件对象,需要子类重写
abstract override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)
override fun getItemViewType(position: Int): Int = 0
override fun getItemId(position: Int): Long = position.toLong()
var itemClickListener: OnItemClickListener? = null
fun setOnItemClickListener(listener: OnItemClickListener) {
this.itemClickListener = listener
}
var itemLongClickListener: OnItemLongClickListener? = null
fun setOnItemLongClickListener(listener: OnItemLongClickListener) {
this.itemLongClickListener = listener
}
override fun onItemClick(view: View, position: Int) {}
override fun onItemLongClick(view: View, position: Int) {}
}
里面有两个 OnItemLongClickListener OnItemClickListener 接口类
package com.xxxxx.pad.base.adapter
import android.view.View
interface OnItemClickListener {
fun onItemClick(view: View, position: Int)
}
package com.xxxxx.pad.base.adapter
import android.view.View
interface OnItemLongClickListener {
fun onItemLongClick(view: View, position: Int)
}
通用类引用
package com.xxxx.pad.base.adapter
import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
/**
* Created by yao on 2022/7/11.
* Describe
*/
//循环视图通用适配器
//将具体业务中会变化的三类要素抽取出来,作为外部传进来的变量。这三类要素包括:
//布局文件对应的资源编号、列表项的数据结构、各个控件对象的初始化操作
class RecyclerCommonAdapter<T>(context: Context, private val layoutId: Int, private var items: List<T>, val init: (View, T) -> Unit): RecyclerBaseAdapter<RecyclerCommonAdapter.ItemHolder<T>>(context) {
override fun getItemCount(): Int = items.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val view: View = inflater.inflate(layoutId, parent, false)
return ItemHolder<T>(view, init)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val vh: ItemHolder<T> = holder as ItemHolder<T>
with(vh) {
bind(items.get(position))
itemView.setOnClickListener {
itemClickListener!!.onItemClick(
itemView,
position
)
}
}
}
//注意init是个函数形式的输入参数
class ItemHolder<in T>(val view: View, val init: (View, T) -> Unit) : RecyclerView.ViewHolder(view) {
fun bind(item: T) {
init(view, item)
}
}
fun notifyChange(datas: List<T>) {
items = datas
notifyDataSetChanged()
}
}
主代码里面使用
var recyclerCommonAdapter: RecyclerCommonAdapter<DataX>? = null
//layoutManager设置的情况
val layoutManager1 = LinearLayoutManager(this@NewMaterialReadyActivity)
mDataBind.MotivationRecyclerview.addItemDecoration(
DividerItemDecoration(
this,
DividerItemDecoration.VERTICAL
)
)
mDataBind.MotivationRecyclerview.layoutManager = layoutManager1
mDataBind.MotivationRecyclerview.setHasFixedSize(true)
recyclerCommonAdapter = RecyclerCommonAdapter(
this, R.layout.item_material_ready_new_activity, datas
) { itemView, item ->
val mocode: TextView = itemView?.findViewById(R.id.mocode)!!
mocode?.text = item.mocode
}
mDataBind.MotivationRecyclerview.adapter = recyclerCommonAdapter
recyclerCommonAdapter!!.setOnItemClickListener(object : OnItemClickListener {
override fun onItemClick(view: View, position: Int) {
}
})
引用思路:直接在activity 初始化adapter 就可以了,不用在写那么多各种实体的是适配器,一个适配器
mDataBind.MotivationRecyclerview 是你自己的recyclerview
itemView, item
itemView 是 R.layout.item_material_ready_new_activity
datas 是你的数据集合
item 就是 datas里面单个数据集
里面只写一个onItemClick 就够用了
项目拷过去直接用