1.RecyclerView的概述
? ? ? ? recyclerView主要是用于做表格显示,列表展示,代替原有的listView,而且提供多种布局,有线性布局linerlayout、网格布局等。像qq一个列表对话框就是recylerview中的一个item等。
? ? ? 其实就是一个列表显示,有一个列表,列表中有多个item,item的布局需要重新写一个xml文件声明item的布局,同时列表显示的内容是一个list集合。
2.RecyclerView的使用
在这里就是简单介绍一个它的使用,以一个小项目为例
(1)首先第一步导包:在build.gradle中添加以下依赖:
implementation 'androidx.recyclerview:recyclerview:1.1.0'
(2)在xml中加入recyclerView这个控件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".search.SearchActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="50dp"/>
</RelativeLayout>
(3)在Activity/fragment中找到控件并且设置
1.找到控件
recyclerView=findViewById(R.id.rv);
2.设置控件的布局(这里以线性布局为例)
recyclerView的布局设置基本就是这四行代码,可以将其封装成一个方法进行使用()
//找到控件
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); //设置线性布局
recyclerView.setLayoutManager(layoutManager);
//设置适配器
adapter=new MyAdapter(this,list);
recyclerView.setAdapter(adapter);
?(4)重点部分 ---------适配器
先上代码,再对代码的每个部分进行详细的解释
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private List<String> list=new ArrayList<String>();
public MyAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.item_letter,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int position) {
holder.tv.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tv;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
tv=itemView.findViewById(R.id.letter);
}
}
}
1.首先写一个MyAdapter类,这个类需要继承RecyclerView中的Adaper类,同时需要在里面写一个类MyViewHolder说明每个item的形式
2.继承Adapter会重写三个方法:
1...........MyViewHolder onCreateViewHolder()方法:
这个方法主要是用于找到子项item得布局,其中的代码基本上都是上面两行代码,需要从activity中传一个context上下文过来,其中item的布局就是一个textView,item_letter.xml文件为:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">
<TextView
android:id="@+id/letter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="20dp"/>
</RelativeLayout>
2...........MyViewHolder onBindViewHolder()方法:
主要是用于展示列表的值,这里就需要
(1)先在MyViewHolder中声明控件并找到控件,并在activity中将data传给adapter:这个方法需要在activity中进行初始化数据并传给adapter
private void initData() {
list.add("看着飞舞的尘埃 掉下来");
list.add("没人发现它存在");
list.add("多自由自在");
list.add("可世界都爱热热闹闹");
list.add("容不下 我百无聊赖");
list.add("不应该 一个人 发呆");
list.add("只有我 守着安静的沙漠");
list.add("等待着花开");
list.add("只有我 看着别人的快乐");
}
在adapter中生成上面的构造方法接受数据
(2)显示到UI就是利用重写的方法:
position就是UI中item中的position
holder.tv.setText(list.get(position));
3............ getItemCount()方法:
返回数据list的个数就行
3.总结
其实,ReyclerView的使用只需要两个xml文件(一个activity的xml、一个item的xml)、一个activity、一个adapter类。
主要的步骤就是
(1)在xml文件写控件、在activity中找到控件并设置控件的属性、adapter
(2)在activity中初始化数据list,并将list和context传给adapter
(3)在adaper重写三个方法、生成constructor、MyViewHolder
4.后续
? ? ? ?这里写的就是一个简单的使用啦,主要就是list数据就是一个简单的string类型,后续还会写bean类型、子项的点击事件、recyclerView和retrofit结合等一些基本使用。
|