虽然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