您当前的位置:首页 > Android教程

Android开发学习教程(19)- Android RecyclerView列表用法

时间:2022-01-15 14:20:05 阅读数:35,541人阅读
版权声明:转载请注明出处,谢谢!
—— 放弃不难,但坚持一定很酷。

RecyclerView是什么

RecyclerView是一个和ListView一样用来显示大量数据列表但是比ListView更高效的列表控件。关于ListView的学习请见上一篇文章。

RecyclerView有什么用

RecyclerView用来更高效的展示大量数据列表。

RecyclerView怎么用

1. 导入依赖包

	implementation 'androidx.recyclerview:recyclerview:1.1.0'

2. 布局中加入RecyclerView控件

	<androidx.recyclerview.widget.RecyclerView
		android:id="@+id/recyclerview"
		android:layout_width="match_parent"
		android:layout_height="match_parent" />

3. 实例化RecycleView并设置布局方式

	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的用法:

	// 获取数据,这里模拟获取到了20条数据
	stringList = new ArrayList<>();
	for (int i = 0; i < 20; i++) {
		stringList.add("Item" + i);
	}
	recyclerView.setAdapter(new MyAdapter());

	// 定义自己的数据适配器
	class MyAdapter extends RecyclerView.Adapter {

		@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();
					}
				});
			}

		}
	}

运行效果:

RecyclerView缓存机制

https://www.jianshu.com/p/3e9aa4bdaefd

https://blog.csdn.net/u013700502/article/details/105058771

------转载请注明出处,感谢您对原创作者的支持------

有偿提供技术支持、Bug修复、项目外包、毕业设计、大小作业

Android学习小站

Q Q:1095817610

微信:jx-helu

邮箱:1095817610@qq.com

添加请备注"Android学习小站"