前言
上一节我们讲了DataBinding
的数据双向绑定,大家感兴趣的话,可以参考以下文章:
DataBinding(一) — 基本使用
DataBinding(二) — 加载图片
DataBinding(三) — BaseObservable,ObservableField实现数据双向绑定
今天让我们来学习下,DataBinding
在RecyclerView
上的使用。
-
DataBinding
基本配置 - 需要用到的数据
model
-
RecyclerView
在Activity
中的加载 -
DataBinding
在RecyclerView
及对应Adapter
上的使用 - 效果图
先给出效果图
效果图.jpeg
一. DataBinding 基本配置
本文涉及到DataBinding
的使用及图片的加载。在讲解前我们需要先做好这些部分的前置准备,DataBinding
基本配置可参考:
DataBinding(一) — 基本使用
图片加载可参考以下文章:
DataBinding(二) — 加载图片
由于之前的文章已经讲解过,这里不再赘述。
二. 需要用到的数据 model
为了便于讲解,这里我们以RecyclerView
加载显示图文item
为例。首先需要准备一个含有图片url
及文字信息等属性的数据实体类User
,代码如下:
/**
* Title:
* description:
* autor:pei
* created on 2023/4/12
*/
@Parcelize
class User() : Parcelable{
var url :String?=null
var name :String?=null
var des:String? =null
constructor(url:String?,name:String?,des:String?) : this() {
this.url=url
this.name=name
this.des=des
}
}
此处涉及到数据实体序列化的问题,我们采用的是实现Parcelable
接口,需要在app_module
对应的build.gradle
中引用Parcelable
相关插件:
plugins {
id 'kotlin-parcelize' //序列化bean的Parcelable插件
//其他代码省略
//......
}
然后在需要序列化的实体上添加@Parcelize
注解,并让该类实现Parcelable
,类似User
的处理:
@Parcelize
class User() : Parcelable{
//其他代码省略
//......
}
ok,至此列表加载涉及到的实体类User
准备完毕。
三. RecyclerView 在 Activity 中的加载
先给出MainActivity
对应布局activity_main.xml
代码:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
MainActivity
对应布局很简单,就是加载一个RecyclerView
控件。由于所有的数据都是在RecyclerView
中加载,所以MainActivity
布局中的<data> </data>
标签中不涉及数据声明。
接着给出MainActivity
中的代码:
package com.ktdemo.activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import com.ktdemo.R
import com.ktdemo.databinding.ActivityMainBinding
import com.ktdemo.entity.User
import com.ktdemo.function.RecyclerViewAdapter
class MainActivity : AppCompatActivity(){
companion object{
private val URL:String = "https://img2.baidu.com/it/u=3998373906,2988633309&fm=253&fmt=auto&app=138&f=PNG?w=500&h=486"
}
private lateinit var mBinding: ActivityMainBinding
private var mListData:MutableList<User> = mutableListOf(
User(URL,"斯嘉丽","一个大美女"),
User(URL,"葛琪","一个性感巨星"),
User(URL,"郎菲","一个皇族继承人")
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//加载布局
mBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)
//加载列表
mBinding.recyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
mBinding.recyclerView.adapter = RecyclerViewAdapter(mListData,this@MainActivity)
}
}
这里我们先构造了一个用于展示数据的集合mListData
,然后在MainActivity
的onCreate(savedInstanceState: Bundle?)
中加载布局并加载RecyclerView
列表。
四. DataBinding在RecyclerView及对应Adapter上的使用
MainActivity
中代码比较简洁,那么接下来我们看看RecyclerView
对应的自定义适配器RecyclerViewAdapter
如何实现的。
先给出自定义适配器RecyclerViewAdapter
对应的布局item.xml
代码:
网友评论