RecycleView In Kotlin

如何在Kotlin中使用RecycleView

仅仅实现了一个最基本的Recycle,每个Item为TextView,所以布局文件就不摆出来了和Java中内容相同

创建Adapter

class MyAdapter(private val context: Context, val data: List) : RecyclerView.Adapter() {
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyHolder {
        return MyHolder(View.inflate(context, R.layout.item, null))
    }

    override fun getItemCount(): Int {
        return data.size
    }

    override fun onBindViewHolder(holder: MyHolder?, position: Int) {
        holder?.textView?.text = data[position]
    }
}

第一行中(private val context: Context, val data: List)这里将构造函数和需要传的参数结合一起,故不需要重写他的构造函数,同样在创建ViewHolder对象的时候也有一定的差异后面会讲到
。也可以用下面比较传统的方式来表示

class MyAdapter : RecyclerView.Adapter() {
    private var context: Context? = null
    private var data: List? = null

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyHolder {
        return MyHolder(View.inflate(context, R.layout.item, null))
    }

    fun MyAdapter(context: Context, data: List) {
        this.context = context
        this.data=data
    }
    ...
    ...
}

优劣就不做比较了看个人爱好(讲道理第一种用着舒服一些的说),其他的就不做赘述了,对照下Java中写法很容易明白的。(?表示对象可以为空,!!表示该对象在不为空的情况下执行,int:Int->变量名:类型。还有注意Kotlin中继承的写法)

ViewHolder

 class MyHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
     val textView = itemView.findViewById(R.id.tv_info)!!
 }

结构和Adapter的创建差不多少了几个需要重写的方法。以上代码中的第二行可以替换为val textView:TextView=itemView.findViewById(R.id.tv_info)(差不多)

初始化RecycleView

RecycleView使用的要素Adapter、LayoutManager...

private fun initTestView() {
    recycleView_child.layoutManager = LinearLayoutManager(this).also { l -> l.orientation = LinearLayoutManager.VERTICAL }
    val data = (1..30).map { it.toString() }//
    val adapter = MyAdapter(context = this@MainActivity, data = data)
    recycleView_child.adapter = adapter
}

这一部分从第二行开始吧,Kotlin中省去了很多get/set方法,XML文件中id都可以直接拿来用。第二行之前并没有去findViewById,recycleView_child是我直接定义在XML文件中的ID,recycleView_child.layoutManager表示对应属性赋值。LinearLayoutManager(this).also { l -> l.orientation = LinearLayoutManager.VERTICAL }中also可以认为是一个扩展方法,具体可以看下这篇https://www.cnblogs.com/duduhuo/p/6934137.html
当然第一行可以有另一种写法

    val linearLayoutManager = LinearLayoutManager(this)
    linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
    recycleView_child.layoutManager = linearLayoutManager

一行顶三行哟·
其次第三行是集合的迭代 (1..30)表示区间,.map{}表示迭代集合中数据 块内用it代替,List集合也可以使用该方法,当然for循环一样也可以
第四行中对应第一部分中的Adapter的初始化,这里传参的同时进行了赋值,context = this@MainActivity可以替换成context = this个人喜好罗

你可能感兴趣的:(RecycleView In Kotlin)