RecyclerView作为谷歌推出的一项新控件,在页面上长得像ListView,但它比ListView具有节约内存的优点,尤其在数据量较多时,使用RecyclerView可以大大减少缓存。
本篇简单描述一下RecyclerView的使用在代码里的表现。
显然,一个长得像列表的页面,其中有很多布局相同或相似的Item,我先写一个只含TextView的Item:
新建item.xml文件
预览大概长这样:
在RecyclerView中有一个重要的类——RecyclerViewAdapter,这里我们需要新建一个属于上面Item的Adapter类,且继承RecyclerView.Adapter。
此外,adapter中也有一个很重要的类——ViewHolder,这是RecyclerView回收内存机制的一个重要部分:一个ViewHolder负责缓存一个View用于显示,当一个View不在页面显示范围(这个范围不是一定的,一般是页面能够看到的item数+2),那么这个ViewHolder就会被回收,用于hold新的View。
在我们新建的Adapter类中,需要重写三个方法:onCreateViewHolder、onBindViewHolder、getItemCount,简单例子见代码:
package com.example.recyclerview
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class MyAdapter(val context: Context) :
RecyclerView.Adapter() {
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
//创建ViewHolder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView = LayoutInflater
.from(context)
.inflate(R.layout.item, parent, false)
return MyViewHolder(itemView)
}
//数据绑定
override fun onBindViewHolder(itemViewHolder: MyViewHolder, position: Int) {
itemViewHolder.itemView.findViewById(R.id.item_text).text="This is item $position"
}
//获取item个数
override fun getItemCount(): Int = 40//设有40个item
}
上面我大概描述,这个页面共有40个Item,每个Item的text是"This is item $position"(这里kotlin的String模板用法不多赘述)。
下面我们要把这个Item放进主页面中,新建一个含RecyclerView控件的activity_main.xml:
最后一步,完成MainActivity类
package com.example.recyclerview
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setupRecyclerView()
}
fun setupRecyclerView() {
val adapter = MyAdapter(this)
val recyclerView = findViewById(R.id.recyclerView)
//将我们之前为item创建的adapter赋予Main_Activity中的RecyclerView控件。
recyclerView.adapter = adapter
//设置布局为垂直线性布局
val layoutManager = LinearLayoutManager(this)
layoutManager.orientation=RecyclerView.VERTICAL
recyclerView.layoutManager = layoutManager
}
}
自此,一个简单的RecyclerView就完成了,我们可以看下运行界面:



