—— 放弃不难,但坚持一定很酷。
RecyclerView是什么
RecyclerView是一个和ListView一样用来显示大量数据列表但是比ListView更高效的列表控件。关于ListView的学习请见上一篇文章。
RecyclerView有什么用
RecyclerView用来更高效的展示大量数据列表。
RecyclerView怎么用
- 导入依赖包
| 1 | implementation ``'androidx.recyclerview:recyclerview:1.1.0' |
|---|
- 布局中加入RecyclerView控件
| 1234 | <``androidx.recyclerview.widget.RecyclerView`` ``android:id``=``"@+id/recyclerview"`` ``android:layout_width``=``"match_parent"`` ``android:layout_height``=``"match_parent" /> |
|---|
- 实例化RecycleView并设置布局方式
| 1234 | 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则是瀑布流摆放。
- 获取数据,定义自己的数据适配器并设置到RecyclerView上
自定义BaseAdapter可以展示任意类型的数据列表项,其实上面SimpleAdapter和ArrayAdapter都是继承自BaseAdapter,区别在于getView方法,SimpleAdapter和ArrayAdapter的getView读者可以自行查看源码,基本和上面截取的一小段差不多。我们来看自定义BaseAdapter的用法:
| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | ``// 获取数据,这里模拟获取到了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> |
|---|
运行效果: