MultiTypeAdapter —— 打造高效并解耦的RecycleView适配器

本文介绍了一款轻量级、支持多数据类型的RecyclerView适配器——MultiTypeAdapter,它能优雅快速地实现通讯聊天界面、朋友圈布局等复杂页面。文章详细讲解了如何在项目中添加依赖、封装ViewHolder和ItemViewBinder,以及具体的使用方法。

MultiTypeAdapter

一款轻量级支持多数据类型的 RecyclerView 适配器; 使用简单,完全解耦;

通讯聊天界面、朋友圈布局、淘宝 UI等复杂页面 优雅快速实现,无论你是一种数据有多种VIew类型,还是多种数据多种类型,还是两者都有,统统帮你快速地、优雅地搞定!

好了,话不多说,直接开始撸代码吧 (代码为Java + Kotlin混合开发)。

1、添加依赖
implementation 'me.drakeet.multitype:multitype:3.3.0'
2、添加工具类

虽然 MultiTypeAdapter 中已经有实现方式了,但是我对其进行进一步优化封装。使用起来更加快捷简单。

首先,对ViewHolder进行封装:

ViewHolder.kt

import android.content.Context
import android.util.SparseArray
import android.view.View
import androidx.annotation.IdRes
import androidx.annotation.StringRes
import androidx.recyclerview.widget.RecyclerView

@Suppress("NOTHING_TO_INLINE")
open class ViewHolder<T>(itemView: View) : RecyclerView.ViewHolder(itemView) {
   
   
    private val cachedViews: SparseArray<View> by lazy {
   
    SparseArray<View>() }
    open var item: T? = null
    open val context: Context
        get() = itemView.context

    @Suppress("UNCHECKED_CAST")
    operator fun <T : View> get(@IdRes id: Int): T = getOptional(id)!!

    fun <T : View> getOptional(@IdRes id: Int): T? {
   
   
        val cachedView = cachedViews[id]
        return if (cachedView != null) {
   
   
            cachedView as T
        } else {
   
   
            val v = itemView.findViewById<View?>(id)
            if (v != null) {
   
   
                cachedViews.put(id, v)
            }
            v as T?
        }
    }

    fun <T : View> findViewById(@IdRes id: Int): T = get(id)

    fun getString(@StringRes id: Int, vararg args: Any?): String =
            context.getString(id, *args)


}

ViewHoder封装完成后,下一步就是封装 ItemViewBinder,

BaseLayoutBinder.kt

import android.os.Handler
import android.os.Looper
import android.view
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值