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实例,并绑定数据

\color{red}{没错,就这行代码就实现了adapter实例的创建与数据绑定}

val adapter = adapter<ItemUserBinding, UserInfo> { binding, data -> binding.user = data }
2、Adapter的使用
adapter.setOnItemClickListener { v, vdb, position ->  }
adapter.setOnItemLongClickListener { v, vdb, position ->  }
//模拟数据
val list = arrayListOf<UserInfo>(
    //···
)
adapter.refresh(list)
上一篇下一篇

猜你喜欢

热点阅读