与ListView对比优势:
1.运行效率更高。
2.能实现横向滚动与瀑布流布局。
官方更加推荐Recycler控件,但因为后期加入又要使所有版本的Android都能使用,所以把它放入了support库当中,所以使用的第一步,是在项目的build.gradle中添加相应的依赖库。
打开app/build.gradle文件,在dependencies中添加
implementation 'com.android.support:recyclerview-v7:28.0.0'
不同项目不同版本的依赖库版本号不同,截图给大家参考下我现在的,不必模仿:
点击Sync Now同步。
那么如何使用这个控件呢?点击activity_main.xml,修改代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
中间的这段代码,就是调用RecyclerView控件。因为它并不是内置在SDK中的控件,所以使用时要写出完整的路径名。
接下来我们以水果列表显示为例分别实现四个功能,每个功能讲解结束都会附上Demo,请自行下载:
1:实现纵向滚动
2:实现横向滚动
3:实现瀑布流布局
4:实现recyclerView点击事件
功能一:实现纵向滚动
先创建一个Fruit类Fruit.java,代码如下:
package com.example.recyclerviewtest;
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_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">
<ImageView
android:id="@+id/fruit_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"/>
</LinearLayout>
接下来为RecyclerView准备一个适配器,新建FruitAdapter类文件FruitAdapter.java,让这个个适配器继承自RecyclerView.Adapter,并将泛型指定为FruitAdapter.ViewHolder。其中ViewHolder是我们在FruitAdapter中定义的一个内部类,代码如下:
package com.example.recyclerviewtest;
import android.media.Image;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.w3c.dom.Text;
import java.util.List;
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private List<Fruit> mFruitList;
//传入view参数,这个参数就是RecyclerView的子项布局,这样就能找到里面各个控件的id
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView fruitImage;
TextView fruitName;
public ViewHolder(@NonNull View itemView) {
super(itemView);
fruitImage =