—— 放弃不难,但坚持一定很酷。
RecyclerView是什么
RecyclerView是一个和ListView一样用来显示大量数据列表但是比ListView更高效的列表控件。关于ListView的学习请见上一篇文章。
RecyclerView有什么用
RecyclerView用来更高效的展示大量数据列表。
RecyclerView怎么用
1. 导入依赖包
1
|
implementation 'androidx.recyclerview:recyclerview:1.1.0' |
2. 布局中加入RecyclerView控件
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
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> |
运行效果: