版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文为个人理解,如有错误请多指教。
****RecyclerView的基本用法
1.先找Gradle Scripts文件夹下的build.grade(Module:app)文件
在dependencies下添加依赖
dependencies{
...
implementation 'androidx.recyclerview:recyclerview:1.0.0'
}
然后点击右上方的Sync Now
2.写一个适配器布局,用于显示RecyclerView的每一项
<?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">
<TextView
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/name"
/>
<TextView
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="3"
android:id="@+id/age"
/>
</LinearLayout>
3.写一个实体类,用于适配器和RecyclerView相对应。
public class Item{
private String name;
private String age;
//定义两个变量,用于对应xml中的 age 和 name
public Item(String name,String age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public String getAge(){
return age;
}
}
4.现在可以写适配器了
//1.先写一个构造方法,用于接收要显示的数据
//2.写一个内部类,用于继承ViewHolder方法,并在这个类中设置这个类的属性
//3.在内部类的构造方法中对属性进行初始化
//4.继承RecyclerView的Adapter方法(adapter extends RecyclerView.Adapter<adapter.viewHolder>)
/*关于ViewHolder:
我们在继承RecyclerView.Adapter方法时,会自动生成三个方法。
onCreateViewHolder,onBindViewHolder,getItemCount。
所以我的理解是这样的,RecyclerView.Adapter方法实现RecyclerView的适配器。实现的其实是将内部类viewHolder的对象实例化(因为viewHolder实际继承了ViewHolder)。
所以我们继承的时候直接加上<adapter.viewHolder>的泛型,使onCreateViewHolder方法直接返回一个viewHolder类型的对象,然后在onBindViewHolder方法中为这个对象的属性赋值。
这样,一个具有viewHolder属性的对象,也就是RecyclerView每一项的实际内容就显示出来了。
*/
public class adapter extends RecyclerView.Adapter<adapter.viewHolder>{
private List list;
public adapter(List list){
this.list = list;
//构造方法
}
public class viewHolder extends RecyclerView.ViewHolder{
//内部类
TextView textView1;
TextView textView2;
//设置属性
public viewHolder(View itemView){
//在内部类的构造方法中给属性初始化
super(itemView);
textView1 = itemView.findViewById(R.id.age);
textView2 = itemView.findViewById(R.id.name);
}
}
@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//用于创建viewHolder对象
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
viewHolder holder = new viewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull viewHolder holder, int position) {
//用于给viewHolder对象赋值
Item item = (Item) list.get(position);
holder.t1.setText(item.getName());
holder.t2.setText(item.getAge());
}
@Override
public int getItemCount() {
return list.size();
}
}
5.在布局给RecyclerView留下空间,就像这样
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler"
>
6.在活动中使用RecyclerView
public class MainActivity extends AppCompatActivity {
List list = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
init();//生成数据
RecyclerView re = findViewById(R.id.recycler);
adapter a = new adapter(list);//加载适配器
LinearLayoutManager manager = new LinearLayoutManager(this);
//LayoutManager用于指定RecyclerView的布局方式
re.setLayoutManager(manager);
re.setAdapter(a);
}
public void init(){
//传入数值
Item item = new Item("aa","aaaa");
list.add(item);
}
}