Android开发学习教程(19)- Android RecyclerView列表用法
—— 放弃不难,但坚持一定很酷。
RecyclerView是什么
RecyclerView是一个和ListView一样用来显示大量数据列表但是比ListView更高效的列表控件。关于ListView的学习请见上一篇文章。
RecyclerView有什么用
RecyclerView用来更高效的展示大量数据列表。
RecyclerView怎么用
1. 导入依赖包
1
implementation
'androidx.recyclerview:recyclerview:1.1.0'
2. 布局中加入RecyclerView控件
1
2
3
4
<
androidx.recyclerview.widget.RecyclerView
android:id
=
"@+id/recyclerview"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
/>
3. 实例化RecycleView并设置布局方式
1
2
3
4
RecyclerView recyclerView = findViewById(R.id.recyclerview);
LinearLayoutManager layoutManager =
new
LinearLayoutManager(
this
);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
其中LinearLayoutManager就是类似ListView的功能,列表上下滚动(LinearLayoutManager.VERTICAL)或者左右滚动(LinearLayoutManager.VERTICAL)。除了可以设置为LinearLayoutManager还可以设置GridLayoutManager、StaggeredGridLayoutMnager,GridLayoutManager是网格摆放,而StaggeredGridLayoutMnager则是瀑布流摆放。
4. 获取数据,定义自己的数据适配器并设置到RecyclerView上
自定义BaseAdapter可以展示任意类型的数据列表项,其实上面SimpleAdapter和ArrayAdapter都是继承自BaseAdapter,区别在于getView方法,SimpleAdapter和ArrayAdapter的getView读者可以自行查看源码,基本和上面截取的一小段差不多。我们来看自定义BaseAdapter的用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 获取数据,这里模拟获取到了20条数据
stringList =
new
ArrayList<>();
for
(
int
i =
0
; i <
20
; i++) {
stringList.add(
"Item"
+ i);
}
recyclerView.setAdapter(
new
MyAdapter());
// 定义自己的数据适配器
class
MyAdapter
extends
RecyclerView.Adapter<myadapter.myviewholder> {
@NonNull
@Override
public
MyAdapter.MyViewHolder onCreateViewHolder(
@NonNull
ViewGroup parent,
int
viewType) {
View itemView = LayoutInflater.from(MainActivity.
this
).inflate(R.layout.item_recyclerview, parent,
false
);
return
new
MyViewHolder(itemView);
}
@Override
public
void
onBindViewHolder(
@NonNull
MyAdapter.MyViewHolder holder,
int
position) {
holder.tvName.setText(stringList.get(position));
}
@Override
public
int
getItemCount() {
return
stringList ==
null
?
0
: stringList.size();
}
// 定义缓存ViewHolder
class
MyViewHolder
extends
RecyclerView.ViewHolder {
public
TextView tvName;
public
MyViewHolder(View itemView) {
super
(itemView);
tvName = itemView.findViewById(R.id.tv_name);
tvName.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
Toast.makeText(MainActivity.
this
, tvName.getText(), Toast.LENGTH_SHORT).show();
}
});
}
}
}
</myadapter.myviewholder>
运行效果:
源码链接:https://yunjunet.cn/876790.html