RecycleView小白入门详解(教你全面掌握其用法)

RecycleView概念

RecyclerView是Android 5.0提出的新UI控件,位于support-v7包中,向下兼容到android 3.0版本,在很多列表场景中能替代ListView和GridView。

RecycleView能够灵活实现大数据的展示,视图的复用管理比ListView更好,能够显示列表,网格,瀑布等形式,且不同的ViewHolder能够实现item多元化的功能

效果展示

在这里插入图片描述

RecycleView实战

(1)对于RecycleView而言,第一步我们需要导入RecycleView的依赖

    implementation 'androidx.recyclerview:recyclerview:1.1.0'

当然,我们也可以去xml中下载RecycleView,如图所示,点击一下RecycleView即可自动下载。
在这里插入图片描述

(2)当我们下载完RecycleView之后,我们就可以在我们的布局文件中使用其布局了,如图所示

在这里插入图片描述
代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".HorRecycleActivity">
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/hor_recycle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>
</LinearLayout>

(3)在我们的java代码中获取到上述recycleView控件,并为这个recycleView控件设置线性布局方式展示。

   //获取RecyclerView控件
        hor_recycle=findViewById(R.id.hor_recycle);
        //为线性布局
        hor_recycle.setLayoutManager(new LinearLayoutManager(HorRecycleActivity.this));

(4)为recycleView设置适配器

 //为其设置适配器
        hor_recycle.setAdapter(new HorAdapter(HorRecycleActivity.this));

(5)上述的HorAdapter我们并没有设置,因此,这一步我们就需要定义一定

HorAdapter的类,并且让其继承RecyclerView.Adapter,具体操作如下
在这里插入图片描述
当我们创建完之后,我们看到的应为这样

public class HorAdapter extends RecyclerView.Adapter {
    
    
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    
    
        return null;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    
    

    }

    @Override
    public int getItemCount() {
    
    
        return 0;
    }
}

那么重要的一步来了
我们把鼠标放在Adapter上面并ctrl+鼠标左击,进入Adapter源码。
在这里插入图片描述
进入以后我们看到源码中Adapter使用了泛型
Adapter< extends ViewHolder>
在这里插入图片描述
因此,我们需要在我们刚刚写的HorAdapter类中也要让其有泛型ViewHolder
,这里我们采用一个内部类MyViewHolder来继承ViewHolder
不用过于担心你还不会写,后面我会把完整的代码放到文章末尾

    //需要定义一个内部类继承ViewHolder
    class  MyViewHolder extends RecyclerView.ViewHolder {
    
    
private TextView textView;
        public MyViewHolder(@NonNull View itemView) {
    
    
            super(itemView);
            //注意这里是通过itemView来找,而不是R,因为我们的textView是在itemView里面的
            textView=itemView.findViewById(R.id.textView);
        }
    }

我们先不要管MyViewHolder构造方法里面的textview是什么,后面我们在介绍。
当我们写完MyViewHolder之后,我们就可以在HorAdapter类添加一个泛型了

public class HorAdapter extends RecyclerView.Adapter<HorAdapter.MyViewHolder> 

同时我们可以看到MyViewHolder继承RecyclerView.Adapter的三个方法中,有两个地方是ViewHolder,我们需要将箭头部分的ViewHolder改成我们刚刚写的内部类MyViewHolder(如果你不懂原理,那么以后你写RecycleView就照着这种方式写就行了)
在这里插入图片描述

改完之后应该这样

public class HorAdapter extends RecyclerView.Adapter<HorAdapter.MyViewHolder> {
    
    


    @NonNull
    @Override
    public HorAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    
    
       
            return null;
    }
//展示数据
    @Override
    public void onBindViewHolder(@NonNull HorAdapter.MyViewHolder holder, int position) {
    
    

    }

    @Override
    public int getItemCount() {
    
    
        //需要展示的个数
        return 0;
    }
    //需要定义一个内部类继承ViewHolder
    class  MyViewHolder extends RecyclerView.ViewHolder {
    
    
private TextView textView;
        public MyViewHolder(@NonNull View itemView) {
    
    
            super(itemView);
            //注意这里是通过itemView来找,而不是R,因为我们的textView是在itemView里面的
            textView=itemView.findViewById(R.id.textView);
        }
    }

}

ok,在前面我们说到MyViewHolder里面还有哥textView,那么这个是从哪里来的呢?我们知道RecycleView是用来展示数据的,那么每一个数据是不是应该都有一个布局,然后RecycleView最后汇总每一个布局让其展示在一个界面上呢?因此我们需要创建一个单独的布局来展示数据

(6)创建每一项数据的布局hor_item(这里的布局仅仅只有一个TextView)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="439dp"
        android:layout_height="match_parent"
        android:background="#CCC5C5"
        android:gravity="center"
        android:text="TextView"
        android:textSize="20sp" />
</LinearLayout>

好了这样我们就可以解释MyViewHolder 里面的textview了,这里我们通过
itemView.findViewById(R.id.textView);去寻找到hor_item中的控件,为后面给控件添加值做准备

//需要定义一个内部类继承ViewHolder
    class  MyViewHolder extends RecyclerView.ViewHolder {
    
    
private TextView textView;
        public MyViewHolder(@NonNull View itemView) {
    
    
            super(itemView);
            //注意这里是通过itemView来找,而不是R,因为我们的textView是在itemView里面的
            textView=itemView.findViewById(R.id.textView);
        }
    }

}

(7)重写Adapter的父类方法:


public class HorAdapter extends RecyclerView.Adapter<HorAdapter.MyViewHolder> {
    
    
    private Context mcontext;
    //1.构造方法
    public HorAdapter( Context context) {
    
    
        this.mcontext=context;
    }

    @NonNull
    @Override
    public HorAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    
    
        //传入一个item布局
            return new MyViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.hor_item,parent,false));
    }
//展示数据
    @Override
    public void onBindViewHolder(@NonNull HorAdapter.MyViewHolder holder, int position) {
    
    
holder.textView.setText("Hello ,Android");
    }

    @Override
    public int getItemCount() {
    
    
        //需要展示的个数
        return 30;
    }
    //需要定义一个内部类继承ViewHolder
    class  MyViewHolder extends RecyclerView.ViewHolder {
    
    
private TextView textView;
        public MyViewHolder(@NonNull View itemView) {
    
    
            super(itemView);
            //注意这里是通过itemView来找,而不是R,因为我们的textView是在itemView里面的
            textView=itemView.findViewById(R.id.textView);
        }
    }

}

这里我给出了HorAdapter的完整代码
1.通过构造方法,获取到上下文
2.在我们的onCreateViewHolder方法中
new MyViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.hor_item,parent,false));
其中(R.layout.hor_item为每一项数据的布局。
3.在onBindViewHolder方法中为item中的控件设置值holder.textView.setText("Hello ,Android");
4.在 getItemCount方法中设置你需要展示多少个item。

到此我们的适配器类就结束了

(8)最后我们就可以为HorRecycleActivity中的RecyclerView设置适配器了

  hor_recycle.setAdapter(new HorAdapter(HorRecycleActivity.this));

代码参考地址

源码码云链接

后续

你以为你掌握了recycleview了嘛,不,你还没有掌握,我们为其设置点击事件了嘛,难道只有像我们一开始界面的展示效果嘛?有没有其他的了呢?这些答案是肯定的!有!一定有,那我们在后面一篇文章来介绍吧,今天就先聊到这里吧

技术聊

大家感兴趣可以加QQ群来讨论技术丫
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45353823/article/details/107723612