Kotlin中一行代码搞定RecyclerView Adapte
2021-10-08 本文已影响0人
小耗子_20da
准备工作
1、添加依赖
在settings.gradle 文件中添加
repositories {
maven { url 'https://jitpack.io' }
}
在app/build.gradle文件中添加
implementation 'com.github.xiaohaozi9825:adapter_plus:3.01.00'
2、创建一个工具类
AdapterUtil.kt
inline fun <reified VDB : ViewDataBinding, reified D> adapter(noinline bind: (binding: VDB, data: D?) -> Unit) =
object : SimpleAdapter<VDB, D>() {
override fun onBindViewHolder(holder: ViewHolder<VDB>, position: Int, binding: VDB, data: D?, checkIndex: Int) {
bind.invoke(binding, data)
}
}
数据类和布局文件
1、创建一个数据类
data class UserInfo(val name: String, val headPortrait: String, val ana: String)
2、编写布局文件
item_user.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="pw.xiaohaozi.adapter.info.UserInfo" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_head_portrait"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_margin="8dp"
circle_src="@{user.headPortrait}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="@{user.name }"
tools:text="马云"
android:textColor="@android:color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintLeft_toRightOf="@id/iv_head_portrait"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="@{user.ana }"
tools:text="我对钱没兴趣"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@id/iv_head_portrait" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Adapter 创建与使用
1、创建adapter实例,并绑定数据
val adapter = adapter<ItemUserBinding, UserInfo> { binding, data -> binding.user = data }
2、Adapter的使用
- item点击事件
adapter.setOnItemClickListener { v, vdb, position -> }
- item长按事件
adapter.setOnItemLongClickListener { v, vdb, position -> }
- adapter 修改数据
//模拟数据
val list = arrayListOf<UserInfo>(
//···
)
adapter.refresh(list)