1.使用RecyclerView第一步导入依赖在build.gradle文件中添加一些语句
implementation 'androidx.recyclerview:recyclerview:1.1.0'
2.在你需要使用的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
重写一下三个方法
//此方法用于绑定条目的的格式
@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.条目布局如下
android:id="@+id/LLL"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_margin="10dp"
android:id="@+id/iv"
android:layout_width="100dp"
android:background="@drawable/gtx"
android:layout_height="100dp"/>
android:layout_margin="10dp"
android:id="@+id/tv123"
android:text="我是第一个"
android:layout_width="200dp"
android:layout_height="100dp"/>
LinearLayout>
8.设置控件,在适配器中写,一般在继承RecyclerView.Adapter,利用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 mData;
public MyAdapter(List 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 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 {
private final List mData;
//声明接口变量
public MyViewHolerClicks myViewHolerClicks;
public MyAdapter(List 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);
}
}
}
效果如下
此文章只是本人在学习中写的笔记,如有不对请指正。