这是我参与「第四届青训营 」笔记创作活动的第12天
使用笔记
1.为什么要使用RecyclerView?
ListView虽然功能强大,不过ListView并不是完美无缺的,比如如果不使用一些技巧 来提升它的运行效率,那么ListView的性能就会非常差。不仅如此,ListView不能实现横向滚动,因此我们必须使用RecyclerView。
2.RecyclerView的基本用法
RecyclerView属于新增控件,要使用这个控件需要在项目的build.gradle中添加RecyclerView库的依赖,就能保证在所有 Android系统版本上都可以使用RecyclerView控件了。
添加依赖
代码
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了
运行效果:
使用总结
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中去注册事件。