kotlin 万能适配器

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 就够用了
项目拷过去直接用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值