RecyclerView相对于ListView拥有更高的性能和扩展性
不过如果理解了ListView的性能优化,就能对RecyclerView有更深刻的认识
有关ListView的优化,可阅读上一篇博文《ListView的创建和优化》
基本使用方法(纵向滚动)
由于RecyclerView
是新增控件,在使用之前需要在app/build.gradle
文件中添加其依赖
dependencies {
//·······略·······
implementation 'androidx.recyclerview:recyclerview:1.1.0'
}
然后我们修改布局文件,为其添加一个RecyclerView
控件
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
由于RecyclerView并没有内置在系统SDK中,所以需要写出完整的包路径
接着我们为其创建一个适配器
//创建一个适配器,其继承于RecyclerView.Adapter,泛型指定为FruiAdapter.ViewHolder(需要自定义的内部类)
class FruitAdapter(val fruitList:List<Fruit>): RecyclerView.Adapter<FruitAdapter.ViewHolder>() {
//用于缓存控件实例的内部类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_layout,parent,false)
return ViewHolder(view)
}
//当子项进入屏幕时调用,对子项进行赋值
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
//获取当前项的元素
val fruit = fruitList[position]
//将元素的值赋给当前子项的各个控件
holder.fruitImage.