敞开生长之旅!这是我参与「日新计划 2 月更文应战」的第 9 天,点击检查活动概况

前言

本篇咱们持续回归新手根底知识点,当然,RecyclerView控件是安卓开发中非常重要的,之前的文章也聊到过一些第三方库将其封装变得更好用,可是言归正传,咱们首先得学会官方版别的,下面咱们就来看看如何运用它。

正篇

RecyclerView是作为一个增强版的ListView,提供了更为强壮的滑动列表作用。

运用方法

首先咱们需求导入库,所以要在项目的build.gradle(…/app/build.gradle)中添加RecyclerView库依靠,现在版别已经到1.2.1,假如后续版别落后,AS会提示你去晋级:

implementation 'androidx.recyclerview:recyclerview:1.2.1'

在咱们点击Sync同步好Gradle后就能开始运用RecyclerView了。

第一步

咱们先在XML布局运用RecyclerView控件:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/vRecyclerView"
    android:layout_marginTop="20dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

第二步

界说一个实体类,作为列表适配器的适配类型:

class Test(val name:String, val testId: Int)

再去界说它的对应布局(列表子项布局),在layout文件夹下创立一个test_item.XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp">
    <ImageView
        android:id="@+id/vTestImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginStart="10dp"
        android:contentDescription="@string/test" />
    <TextView
        android:id="@+id/vTestName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginStart="10dp"/>
</LinearLayout>

第三步

咱们需求新建一个类作为RecyclerView的适配器,而且让这个新建类继承自RecyclerView.Adapter,咱们再将这个新建类里界说一个内部类ViewHolder,最终将泛型指定为这个新建类.ViewHolder,以及重写完成三个必要的方法:

安卓开发基础——使用RecyclerView

package com.example.myapplication
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class TestAdapter(val testList: List<Test>) :
RecyclerView.Adapter<TestAdapter.ViewHolder>() {
    inner class ViewHolder(view : View) : RecyclerView.ViewHolder(view) {
        val testImageId : ImageView = view.findViewById(R.id.vTestImage)
        val testName : TextView = view.findViewById(R.id.vTestName)
    }
    //布局构建,结构函数,返回ViewHolder实例
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.test_item, parent, false)
        return ViewHolder(view)
    }
    //对RecyclerView子项数据赋值,会在每个子项被滚动到屏幕内执行
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val test = testList[position]
        holder.testImageId.setImageResource(test.testImageId)
        holder.testName.text = test.name
    }
    //获取RecyclerView子项数量
    override fun getItemCount() = testList.size
}

第四步

上面操作完结,咱们就能在Activity中运用RecyclerView:

设置全局变量列表参数:

private val testList = ArrayList<Test>()

写初始化列表数据函数:

private fun initTests() {
    repeat(2) {
        testList.add(Test("test1", R.mipmap.rabbit))
        testList.add(Test("test2", R.mipmap.ic_more))
    }
}

正式绑定到RecyclerView运用:

//初始化测试数据
initTests()
val layoutManager = LinearLayoutManager(this)
binding.vRecyclerView.layoutManager = layoutManager
val adapter = TestAdapter(testList)
binding.vRecyclerView.adapter = adapter

这里提一下,LayoutManager是用于指定RecyclerView布局方法的,假如想横向完成列表需求在layoutManager参数完成后加一句:

layoutManager.orientation = LinearLayoutManager.HORIZONTAL

当然,你的子项布局test_item也最好调整一下,适配一下横向摆放。

此外,咱们的RecyclerView点击事情是在咱们的适配器TestAdapter中的onCreateViewHolder方法中去注册的。

总结

这一块知识点最初刚学的时候是比较费事的,但在工作中用着用着就熟悉了,加上有之前文章介绍的好用的第三方库支撑:强壮而灵活的RecyclerView Adapter——BRVAH(框架引入与BaseQuickAdapter运用篇) – () 、新年兔兔送祝福——SearchRabbit(安卓app) – (),所以到后边还是能用起来得心应手的。