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
个人喜好罗推荐阅读
- 任时光绽放成六月繁花
- 我从来不做坏事
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 樱花雨
- 如何寻找情感问答App的分析切入点
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 人如果没梦想,和咸鱼有什么区别(自媒体时代把握住就能咸鱼翻身)
- 如何在Mac中的文件选择框中打开系统隐藏文件夹