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

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


被折叠的 条评论
为什么被折叠?



