一、实现的步骤
1.导包recyclerview包
dependencles{ implementation'androidx.recyclerview:recyclerview:1.1.0'}
2.创建布局,定义一个主布局,布局样式是Recyclerview。
3.再定义一个该单元格布局的内容,将内容样式绘制出来
4.创建数据类,利用封装将数据封装在bean里面
5.创建集合list,然后利用for循环,将数据bean放在集合里面
6.创建适配器recyclerview,将适配器的方法实现
7.在适配器内定义变量数据源和上下文,然后创建该构造方法,
8.绑定控件,将数据源和上下文传进来,然后放入适配器
9.实现MyAdapter的各个方法,将页面渲染上去
10.创建布局样式(线性布局,网格布局,瀑布流等)
11.recyclerview没有监听,需要自己设置,首先创建一个接口,然后创建接口的对象,再接着我们给外部设置一个监听的方法,将值赋值给接口的对象。
12.设置监听,获取点击位置
13.点击之后,设置消息提醒
二、总体代码
1.布局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" > <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_item" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
2.布局recyclerview_item.xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/tv_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" android:textColor="#81D835" /></LinearLayout>
3.MyDataBean文件代码
package com.example.myrecyclerview.bean;//1.定义变量,封装数据public class MyDataBean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
4.MainActivity文件代码
package com.example.myrecyclerview;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.GridLayoutManager;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import androidx.recyclerview.widget.StaggeredGridLayoutManager;import android.os.Bundle;import android.view.View;import android.widget.Toast;import com.example.myrecyclerview.adapter.MyAdapter;import com.example.myrecyclerview.bean.MyDataBean;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private List<MyDataBean> list=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //2.定义集合,利用for循环,将数据放进集合 for (int i=990;i<2000;i++){ if (i%4!=0){ continue; } MyDataBean myDataBean=new MyDataBean(); myDataBean.setName("安卓测试" + i); list.add(myDataBean); } //5.绑定布局的控件 RecyclerView rv_item = findViewById(R.id.rv_item); //线性布局,水平方向,垂直方向布局// LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);// rv_item.setLayoutManager(linearLayoutManager); //网格布局,一定的大小,规整// GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);// rv_item.setLayoutManager(gridLayoutManager); //瀑布流,不规整 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); rv_item.setLayoutManager(staggeredGridLayoutManager); //6.创建适配器,将数据源和上下文传入,然后调用适配器 MyAdapter myAdapter=new MyAdapter(list,this); rv_item.setAdapter(myAdapter); //13.点击之后设置消息提醒 myAdapter.setRecyclerItemClickListener(new MyAdapter.OnRecyclerItemClickListener() { @Override public void OnRecyclerItemClick(int position) { Toast.makeText(MainActivity.this, "被点击了"+position, Toast.LENGTH_SHORT).show(); } }); }}
5.MyAdapter文件代码
package com.example.myrecyclerview.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView;import com.example.myrecyclerview.R;import com.example.myrecyclerview.bean.MyDataBean;import java.util.List;//3.创建适配器,继承recyclerview,创建viewholder类public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { //4.定义数据源和上下文,创建构造函数 private List<MyDataBean> list; private Context context; public MyAdapter(List<MyDataBean> list, Context context) { this.list = list; this.context = context; } /* 11.recyclerview没有监听,需要自己设置,首先创建一个接口,然后创建接口的对象, 再接着我们给外部设置一个监听的方法,将值赋值给接口的对象。 */ public OnRecyclerItemClickListener mOnItemClickListener; public void setRecyclerItemClickListener(OnRecyclerItemClickListener listener){ mOnItemClickListener=listener; } public interface OnRecyclerItemClickListener{ void OnRecyclerItemClick(int position); } //7.实现适配器的第一个方法,渲染布局,将布局放入viewholder,返回 @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View inflate = LayoutInflater.from(context).inflate(R.layout.recyclerview_item, parent, false); MyViewHolder myViewHolder=new MyViewHolder(inflate); return myViewHolder; } //9.获取这个控件的值 @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.tv_item.setText(list.get(position).getName()); } //10.获取集合的长度,若该集合的数据不为空,则计算该数据的长度 @Override public int getItemCount() { return list==null ? 0: list.size(); } //8.实现viewholder类,在类里面实现控件的绑定 public class MyViewHolder extends RecyclerView.ViewHolder { private TextView tv_item; public MyViewHolder(@NonNull View itemView) { super(itemView); tv_item = itemView.findViewById(R.id.tv_item); //12.设置监听,获取点击的位置 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mOnItemClickListener!=null){ mOnItemClickListener.OnRecyclerItemClick(getAdapterPosition()); } } }); } }}
6.效果图:(瀑布流形式)<br />