RecyclerView高级控件 & 案例实践

RecyclerView是Android 及其重要的一个高级UI控件,使用频率及其的高,APP的90%以上的页面都会使用的到。由于其出色的性能插拔式的架构设计,被全世界广大开发者一致称赞。

RecyclerView族谱

LinerLayoutManager列表布局

纵向列表横向列表
linear_vreticallinear_layout_horizontal

纵向列表

recyclerView.layoutManager =LinearLayoutManager(context, VERTICAL, false)
recyclerView.adapter = MyAdapter()

横向列表

recyclerView.layoutManager =LinearLayoutManager(context, HORIZONTAL, false)
recyclerView.adapter = MyAdapter()

数据源适配器

inner class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
        // 【必须复写】创建ItemView的ViewHolder,用于后续的数据绑定
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
          val view =LayoutInflater.from(context).inflate(R.layout.item_view_staggered, parent, false)  
          return ViewHolder(view)
        }

        // 【必须复写】告诉RecyclerView列表上item的条数
        override fun getItemCount(): Int {
            return 20
        }

        // 【必须复写】item的数据绑定
        override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            holder.itemView.item_head.setImageResource(R.drawable.icon_jetpack)
            holder.itemView.item_name.text = "【${position}】移动端架构师体系课"
            holder.itemView.item_message.text =
                "移动开发“两极分化”,没有差不多的“中间层,唯有尽早成长为架构师,你的职业道路才能走的更远更稳"
        }
    }

    // 创建一个ViewHolder 必须继承自 RecyclerView.ViewHolder。用于后续的数据绑定
    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    }

GridLayoutManager网格布局

grid_layout_vertical

recyclerView.layoutManager = GridLayoutManager(context, 2)
recyclerView.adapter = MyAdapter()

StaggeredGridLayoutManager瀑布流布局

recyclerView.layoutManager =StaggeredGridLayoutManager(2, VERTICAL)
recyclerView.adapter = MyAdapter()

grid_layout_staggered

Kotlin扩展插件

可以直接使用布局中的控件id来操作view控件, 不用再findViewById。大大提高工作效率,减少模板代码量

需要在根目录下的build.gradle添加kotlin-android-extensions插件

buildscript {
    ext.kotlin_version = "1.3.72"
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.0"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

需要在app/build.gradle应用kotlin-android-extensions插件

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
}