美文网首页
DataBinding(四) — 在RecyclerView上的

DataBinding(四) — 在RecyclerView上的

作者: 奔跑的佩恩 | 来源:发表于2023-07-11 18:17 被阅读0次

前言

上一节我们讲了DataBinding的数据双向绑定,大家感兴趣的话,可以参考以下文章:
DataBinding(一) — 基本使用
DataBinding(二) — 加载图片
DataBinding(三) — BaseObservable,ObservableField实现数据双向绑定
今天让我们来学习下,DataBindingRecyclerView上的使用。

  1. DataBinding基本配置
  2. 需要用到的数据model
  3. RecyclerViewActivity中的加载
  4. DataBindingRecyclerView及对应Adapter上的使用
  5. 效果图

先给出效果图


效果图.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,然后在MainActivityonCreate(savedInstanceState: Bundle?)中加载布局并加载RecyclerView列表。

四. DataBinding在RecyclerView及对应Adapter上的使用

MainActivity中代码比较简洁,那么接下来我们看看RecyclerView对应的自定义适配器RecyclerViewAdapter如何实现的。
先给出自定义适配器RecyclerViewAdapter对应的布局item.xml代码:

相关文章

网友评论

      本文标题:DataBinding(四) — 在RecyclerView上的

      本文链接:https://www.haomeiwen.com/subject/fnghydtx.html