要使用RecyclerView我们首先要引入它的包,我们在App目录下的Build文件中的dependencies下面加入以下语句:
implementation 'com.android.support:recyclerview-v7:29.0.0'
然后点击Sync Now同步一下代码,接着再打开我们需要加入recyclerView控件的xml里面把RecyclerView控件加入布局中,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
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/rv_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints">
</androidx.recyclerview.widget.RecyclerView>
</androidx.constraintlayout.widget.ConstraintLayout>
接着打开使用了该布局文件的类初始化RecyclerView并初始化数据代码如下:
private RecyclerView recyclerView;
private List<String> datas = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
datas.add("11");
datas.add("22");
datas.add("33");
datas.add("44");
datas.add("55");
}
private void initView() {
recyclerView = this.findViewById(R.id.rv_test);
}
再接着我们先创建一个名为RecyclerViewAdapter的适配器继承RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder>,同时写入自定义的ViewHolder继承RecyclerView.ViewHolder的内部类MyViewHolder。然后引入onCreateViewHolder、onBindViewHolder、getItemCount三个方法,同时补充构造函数RecyclerViewAdapter参数为:Context ,List<String>类型。
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private Context context;
private List<String> datas;
public RecyclerViewAdapter(Context context,List<String> datas){
this.context = context;
this.datas = datas;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
//继承RecyclerView.ViewHolder抽象类的自定义ViewHolder
class MyViewHolder extends RecyclerView.ViewHolder{
public MyViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}
在onCreateViewHolder方法中我们要实例化得到item布局文件的View对象,然后返回我们自定义的MyViewHolder对象代码如下:
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//实例化得到Item布局文件的View对象
View v = View.inflate(context,R.layout.rv_item1,null);
//返回MyViewHolder的对象
return new MyViewHolder(v);
}
接着我们在内部类中对Item布局文件的控件进行初始化:
class MyViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textview);
}
}
再接着在onBindViewHolder方法中绑定我们的Item数据:
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.textView.setText(datas.get(position));
}
最后就是Item数据的数量的返回方法getItemCount进行返回:
@Override
public int getItemCount() {
return datas.size();
}
这样适配器就大公告成,同时贴一下Item的布局文件代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textview"
android:layout_alignParentLeft="true"
android:layout_margin="5dp"
android:textSize="16sp"
android:text="@string/app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:layout_margin="5dp"
android:layout_alignParentRight="true"
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
然后我们回到使用了RecyclerView控件的类中对RecyclerView设置它的Item布局,并且设置我们刚才自己定义的设配器作为它的设配器代码如下:
private void initRecyclerView() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this,datas);
recyclerView.setAdapter(adapter);
}
接着就可以运行项目看看我们的RecyclerView的效果了。
原创:https://blog.csdn.net/weixin_40600325/article/details/93871091