强大的滚动控件:RecyclerView | 青训营笔记

129 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第12天

使用笔记

1.为什么要使用RecyclerView?

ListView虽然功能强大,不过ListView并不是完美无缺的,比如如果不使用一些技巧 来提升它的运行效率,那么ListView的性能就会非常差。不仅如此,ListView不能实现横向滚动,因此我们必须使用RecyclerView。

2.RecyclerView的基本用法

RecyclerView属于新增控件,要使用这个控件需要在项目的build.gradle中添加RecyclerView库的依赖,就能保证在所有 Android系统版本上都可以使用RecyclerView控件了。

添加依赖

image.png

image.png

image.png

image.png

image.png

image.png

代码

1.修改activity_main.xml中的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <androidx.recyclerview.widget.RecyclerView
 android:id="@+id/recyclerView"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />
</LinearLayout>

先为RecyclerView指定一个id,然后将宽 度和高度都设置为match_parent,这样RecyclerView就占满了整个布局的空间。

2.接下来需要为RecyclerView准备一个适配器,新建FruitAdapter类,让这个适配器继承自 RecyclerView.Adapter

示例:

class FruitAdapter(val fruitList: List<Fruit>) :
 RecyclerView.Adapter<FruitAdapter.ViewHolder>() {
 inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
 val fruitImage: ImageView = view.findViewById(R.id.fruitImage)
 val fruitName: TextView = view.findViewById(R.id.fruitName)
 }
 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
 val view = LayoutInflater.from(parent.context)
 .inflate(R.layout.fruit_item, parent, false)
 return ViewHolder(view)
 }
 override fun onBindViewHolder(holder: ViewHolder, position: Int) {
 val fruit = fruitList[position]
 holder.fruitImage.setImageResource(fruit.imageId)
 holder.fruitName.text = fruit.name
 }
 override fun getItemCount() = fruitList.size
}

由于FruitAdapter是继承自RecyclerView.Adapter的,那么就必须重写 onCreateViewHolder()、onBindViewHolder()和getItemCount()这3个方法。 onCreateViewHolder()方法是用于创建ViewHolder实例的,我们在这个方法中将 fruit_item布局加载进来,然后创建一个ViewHolder实例,并把加载出来的布局传入构造 函数当中,最后将ViewHolder的实例返回。

onBindViewHolder()方法用于对 RecyclerView子项的数据进行赋值。

getItemCount()方法就非常简单了,它用于告诉RecyclerView一共有 多少子项,直接返回数据源的长度就可以了。

适配器准备好了之后,我们就可以开始使用RecyclerView了

运行效果:

image.png

使用总结

RecyclerView的优势

  • ListView由于强大的功能,在过去的Android开发当中可以说是贡献卓越,直到今天仍然还有 不计其数的程序在使用ListView。RecyclerView。它可以说是一个增强版的 ListView,不仅可以轻松实现和ListView同样的效果,还优化了ListView存在的各种不足之 处。目前Android官方更加推荐使用RecyclerView,未来也会有更多的程序逐渐从ListView转 向RecyclerView。

  • 在RecyclerView中,已经封装好API来实现自己的动画效果,而ListView没有

  • ListView优化需要自定义ViewHolder和判断convertView是否为null。 而RecyclerView是存在规定好的ViewHolder。

  • ListView是在主方法中ListView对象的setOnItemClickListener方法;RecyclerView则是在子项具体的View中去注册事件。