RecycleView|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] } }

【RecycleView|RecycleView In Kotlin】第一行中(private val context: Context, val data: List)这里将构造函数和需要传的参数结合一起,故不需要重写他的构造函数,同样在创建ViewHolder对象的时候也有一定的差异后面会讲到
。也可以用下面比较传统的方式来表示
class MyAdapter : RecyclerView.Adapter() { private var context: Context? = null private var data: List? = nulloverride 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=https://www.it610.com/article/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 = https://www.it610.com/article/(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个人喜好罗

    推荐阅读