更强大的滚动控件:RecyclerView

我不是罗大锤 2021年11月23日 137次浏览

可以轻松实现ListView的同样效果,并且优化了不足之处。

一、导入依赖

在app/build.gradle中导入依赖

dependencies {
    //如果有新版本,鼠标放在上面会提示更新
    implemention 'androidx.recyclerview:recyclerview:1.1.0'
}

二、在布局文件中使用控件

<androidx.recyclerview.widget.RecyclerView />

三、准备适配器(Adapter)

class FruitAdapter(val fruitList: List<Fruit>) : 
    RecyclerView.Adapter<FruitAdapter.ViewHolder>() {
    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        // 对Item中组件进行绑定
        val textView = findViewById(R.id.**)
        val img = findViewById(R.id.**)
    }
    
    //创建ViewHolder实例,导入item布局,并将item传入ViewHolder中并返回
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) {
        val view = LayoutInflater.from(parent.Context)
            .inflate(R.layout.item,parent,false)
        val viewHolder = ViewHolder(view)
        //item中组件设置事件
        viewHolder.img.setOnClickListener{}
        return viewHolder
    }
    
    //对item中组件赋值
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = fruitList[position]
        holder.textView.text = fruit.text
        holder.img.setImageResource(fruit.imageId)
    }
    
    //返回子项数量
    override fun getItemCount() = fruitList.size
}  

四、在主线程中给RecyclerView设置适配器

val layoutManager = LinearLayoutManager(this)
// recyclerView是组件id
recyclerView.layoutManager = layoutManager
val adapter = FruitAdapter(fruitList)    // 传入数据集合给Adapter
recyclerView.adapter = adapter

五、让RecyclerView横向滚动

上一小节代码LinearLayoutManager默认是纵向滚动,在它下面加上如下代码可实现横向滚动。

layoutManager.orientation = LinearLayoutManager.HORIZONTAL

六、让RecyclerView实现瀑布流布局

// 更换LinearLayoutManager(this)为:
// 3表示三列,VERTICAL表示纵向排列
StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL)