1.使用RecyclerView第一步导入依赖在build.gradle文件中添加一些语句

implementation 'androidx.recyclerview:recyclerview:1.1.0'

2.在你需要使用的recyclerview的布局文件下添加以下代码

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

3.创建模拟数据,

数据格式

public class Mydate {
    public  String name;
    public  int icon;
}

要显示数据的图片

public class DATA {
    public static int[] icon={
        R.mipmap.ic_launcher,R.mipmap.gtx,R.mipmap.ic_launcher,R.mipmap.gtx,R.mipmap.ic_launcher,R.mipmap.gtx,R.mipmap.ic_launcher,R.mipmap.gtx,R.mipmap.ic_launcher,R.mipmap.gtx,R.mipmap.ic_launcher,R.mipmap.gtx,
    };
}

创建模拟数据

private void initdata() {
        mdata=new ArrayList<>();
        for (int i = 0; i < DATA.icon.length; i++) {
            Mydate mydate=new Mydate();
            mydate.icon=DATA.icon[i];//设置每个条目的图片
            mydate.name="我是第"+ i +"个条目";//设置每个条目的文本
            mdata.add(mydate);
        }
    }

5.设置适配器,这里适配器还没创建,下一步将会创建

private void setAdater() {
        LinearLayoutManager manager=new LinearLayoutManager(this);//布局管理器
        recyclerView.setLayoutManager(manager);
        MyAdapter myAdapter=new MyAdapter(mdata);//创建适配器并把数据传入进去
        recyclerView.setAdapter(myAdapter);//设置适配器
    }

6.创建适配器

创建适配器类继承 RecyclerView.Adapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.holder>

重写一下三个方法

//此方法用于绑定条目的的格式
 @Override
    public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view=View.inflate(parent.getContext(),R.layout.item,null);
        return new holder(view);
    }
    @Override
    //此方法用于绑定数据
    public void onBindViewHolder(@NonNull final holder holder, final int position) {
        holder.initdata(mData.get(position));
    }

    @Override
    //此方法用于返回条目格式
    public int getItemCount() {
        if (mData.size()!=0) {
            return mData.size();
        }
        return 0;
    }

7.条目布局如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LLL"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:layout_margin="10dp"
        android:id="@+id/iv"
        android:layout_width="100dp"
        android:background="@drawable/gtx"
        android:layout_height="100dp"/>
    <TextView
        android:layout_margin="10dp"
        android:id="@+id/tv123"
        android:text="我是第一个"
        android:layout_width="200dp"
        android:layout_height="100dp"/>

</LinearLayout>

8.设置控件,在适配器中写,一般在继承RecyclerView.Adapter<MyAdapter.holder> ,利用ALT+ENTER直接生成

class holder extends RecyclerView.ViewHolder {
        public TextView textView;
        public ImageView imageView;
        public holder(@NonNull View itemView) {
            super(itemView);
            //找到控件
            imageView=itemView.findViewById(R.id.iv);
            textView=itemView.findViewById(R.id.tv123);
        }
        public void initdata(Mydate mydate){
        //为控件填入需要写入的数据
            imageView.setImageResource(mydate.icon);
            textView.setText(mydate.name);
        }
    }

10.创建构造器,个人理解,是把数据传入进来,若理解不对,请多多指教

private final List<Mydate> mData;
    public MyAdapter(List<Mydate> mdata) {
        this.mData=mdata;
     }

到这一个简单的RecyclerView就可以使用了

若想在条目中设置点击事件,要进行如下步骤

11.利用接口实现点击事件在适配器中添加以下接口

1.设置接口

//利用接口给Recycler设置点击事件
     public interface MyViewHolerClicks {
         //item的回调方法
         void onItemClick(int position);

     }

2.声明接口变量

public MyViewHolerClicks myViewHolerClicks;

3.声明给外界调用的的方法

public void setMyViewHolerClicks(MyViewHolerClicks myViewHolerClicks) {
        this.myViewHolerClicks = myViewHolerClicks;
    }

4.在绑定数据中设置点击事件,第6步中重写的第二个函数中添加一下代码

if (myViewHolerClicks!=null) {
            holder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    myViewHolerClicks.onItemClick(position);
                }
            });
        }

5.在要使用RecyclerView的Activity中实现接口

MyViewHolerClicks myViewHolerClicks=new MyViewHolerClicks() {


            @Override
            public void onItemClick(int position) {

                Toast.makeText(RecyclerActivity.this,"点击了第"+position+"头像",Toast.LENGTH_SHORT).show();
            }
        };

6.在设置适配器中添加如下代码,在第五步的代码中

myAdapter.setMyViewHolerClicks(myViewHolerClicks);//点击事件

这样点击事件就可以实现了。

全部代码如下Activity的代码如下:

package com.example.fragment.Recycler.java;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.example.fragment.R;
import com.example.fragment.Recycler.Adater.MyAdapter;

import java.util.ArrayList;
import java.util.List;

import static com.example.fragment.Recycler.Adater.MyAdapter.*;

public class RecyclerActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private List<Mydate> mdata;
    private String TAG="RecyclerActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler);
        recyclerView=findViewById(R.id.Recycyler);
        initdata();
        setAdater();
    }
        MyViewHolerClicks myViewHolerClicks=new MyViewHolerClicks() {


            @Override
            public void onItemClick(int position) {

                Toast.makeText(RecyclerActivity.this,"点击了第"+position+"头像",Toast.LENGTH_SHORT).show();
            }
        };


    private void setAdater() {
        LinearLayoutManager manager=new LinearLayoutManager(this);//布局管理器
        recyclerView.setLayoutManager(manager);
        MyAdapter myAdapter=new MyAdapter(mdata);//创建适配器并把数据传入进去
        recyclerView.setAdapter(myAdapter);//设置适配器
        myAdapter.setMyViewHolerClicks(myViewHolerClicks);//点击事件
    }

    private void initdata() {
        mdata=new ArrayList<>();
        for (int i = 0; i < DATA.icon.length; i++) {
            Mydate mydate=new Mydate();
            mydate.icon=DATA.icon[i];//设置每个条目的图片
            mydate.name="我是第"+ i +"个条目";//设置每个条目的文字
            mdata.add(mydate);
        }
    }
}

适配器代码如下:

package com.example.fragment.Recycler.Adater;



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 com.example.fragment.R;
import com.example.fragment.Recycler.java.Mydate;


import java.util.List;


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.holder> {
    private final List<Mydate> mData;


    //声明接口变量
    public MyViewHolerClicks myViewHolerClicks;
    public MyAdapter(List<Mydate> mdata) {
        this.mData=mdata;
     }
     //利用接口给Recycler设置点击事件
     public interface MyViewHolerClicks {
         //item的回调方法
         void onItemClick(int position);

     }
     //声明给外界方法
    public void setMyViewHolerClicks(MyViewHolerClicks myViewHolerClicks) {
        this.myViewHolerClicks = myViewHolerClicks;
    }
    @NonNull
    @Override
    public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view=View.inflate(parent.getContext(),R.layout.item,null);
        return new holder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull final holder holder, final int position) {
        holder.initdata(mData.get(position));
        if (myViewHolerClicks!=null) {
            holder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    myViewHolerClicks.onItemClick(position);
                }
            });
        }
    }

    @Override
    public int getItemCount() {
        if (mData.size()!=0) {
            return mData.size();
        }
        return 0;
    }

    class holder extends RecyclerView.ViewHolder {
        public TextView textView;
        public ImageView imageView;
        public holder(@NonNull View itemView) {
            super(itemView);
            imageView=itemView.findViewById(R.id.iv);
            textView=itemView.findViewById(R.id.tv123);
        }
        public void initdata(Mydate mydate){
            imageView.setImageResource(mydate.icon);
            textView.setText(mydate.name);
        }
    }
}

效果如下

recycle获取item view recyclerview获取子view_java


此文章只是本人在学习中写的笔记,如有不对请指正。