ListView 由于其强大的功能,在过去的 Andorid 开发中使用非常广泛,直到今天仍然还有很多人在使用着,不过 ListView 也有自己的缺陷,例如需要优化来提升运行效率,还有就是只能够纵向移动,我们要想实现横向移动就实现不了,ListView 的扩展性也不好
为此 Android 提供了一个更强大的控件 -- RecyclerView 它可以说是一个增强版的 ListView 不仅可以实现和 ListView 同样的效果,还优化了 ListView 存在的各种不足,现 RecyclerView 也是官方非常推荐使用的滚动控件,大部分的开发人员也都从 listView 转向了 RecyclerView,今天我们就来详细了解一下 RecyclerView
一、RecyclerView 的基本用法
首先,我们新建一个 RecyclerView 项目,并让 Andorid Studio 自动给我们创建好活动
RecyclerView 属于新增的控件,为了让 RecyclerView 在所有 Android 版本上都能使用,Andorid 团队将 RecyclerView 定义在了 support 库当中,因此,想要使用 RecyclerView 这个控件,首先需要在项目的 build.gradle 中添加相应的依赖库才行,这里如果大家对 build.gradle 的使用还不是太熟悉,建议大家先阅读
在上面的文章中我们对 build.gradle 的使用进行了非常详细的讲解,接下来我们来进行依赖,打开 app/build.gradle 文件,在 dependenies 闭包中添加如下内容:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.0'
testCompile 'junit:junit:4.12'
compile 'com.android.support:recyclerview-v7:25.1.0'
}
大家看到最后一行代码,就是我们刚刚添加进来的,上面的都是 Android Studio 自动生成的,添加完记得 Sync Now 来进行同步,然后修改 Activity_main.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="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
在布局中加入 RecyclerView 控件也是非常简单的,先为 RecyclerView 指定一个 id,然后设置了宽和高,这些大家都非常熟悉了,需要注意的是,由于 RecyclerView 不是内置在系统 SDK 当中的,所以需要把完整的包路径写出来
二、定制 RecyclerView 界面
这里和 listView 一样,我们可以对 RecyclerView 界面进行定制,让它来显示更加丰富的界面,以便来适应我们工程开发中的需求,这里首先我们来准备一组图片,来对应我们将要展示的水果名称,接着定义一个实体类,作为 RecyclerView 适配器的适配类型,新建 Fruit,代码如下:
public class Fruit {
private String name;
private int imageId;
public Fruit(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
}
Fruit 类中只有两个字段,name 表示水果的名字,imageId 表示对应水果的图片资源 id
然后需要为 RecyclerView 的子项指定一个我们自定义的布局,在 layout 目录下新建 recyclerview_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="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:layout_marginLeft="20dp"
android:layout_width="wrap_content"