简单案例理清Adapter、ViewHolder和RecyclerView之间的关系

虽然ListView功能很强大,但是也有很多缺点。比如说性能差、扩展性不好等
为此,Android5.0之后提供了一个更强大的滚动控件——RecyclerView,可以说是一个增强版的ListView,优化了ListView的各种不足。
注:本文将以kotlin代码的方式编写,我会尽量写上注释,如有不懂可以提问!
今天先写一个简单的案例,目的在于理清关系;如后期有机会的话,再写一个万能的、多级联动的案例给大家。
案例之前先介绍一下各自的任务,以便理解:

RecyclerView:

用户滑动屏幕切换视图时,上一个视图会回收利用。主要任务是视图回收再利用,循环往复。

ViewHolder:

主要任务是容纳View视图。

Adapter:

从模型层获取数据,然后提供给RecyclerView显示。主要任务是创建ViewHolder和将模型层的数据绑定到ViewHolder上。

LayoutManager:

RecyclerView不会亲自摆放屏幕上的列表项,摆放列表项的任务被委托给了LayoutManager。主要任务是指定RecyclerView的布局方式。

1.添加依赖库

RecyclerView属于新增的控件,Android将RecyclerView定义在support库里。若要使用RecyclerView,第一步是要在build.gradle中添加对应的依赖库。既然要用kotlin代码去实现,那么还要添加kotlin的依赖库。打开app/build.gradle文件,在dependencies闭包中添加如下内容:

	implementation "androidx.core:core-ktx:+"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation 'androidx.cardview:cardview:1.0.0'

添加完之后记得Sync Now同步。

2.添加RecyclerView控件

在activity_main.xml中添加RecyclerView控件,并指定id,然后将宽度和高度都设置为match_parent,这样RecyclerView就沾满了整个布局的空间。代码如下:

	<?xml version="1.0" encoding="utf-8"?>
	<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

3.新建一个实体类,作为RecyclerView适配器的适配类型。新建Fruit类:

	class Fruit(val name:String, val imageId: Int) 

4.为RecyclerView的子项指定一个自定义布局

在layout目录下新建fruit_item.xml,代码如下:

	<?xml version="1.0" encoding="utf-8"?>
	<androidx.constraintlayout.widget.ConstraintLayout
	    xmlns:android="http://schemas.android.com/apk/res/android"
	    android:layout_width="match_parent"
	    android:layout_height
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值