美文网首页
RecycleView In Kotlin

RecycleView In Kotlin

作者: 妖苔 | 来源:发表于2018-03-26 17:55 被阅读54次

    如何在Kotlin中使用RecycleView

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

    创建Adapter

    class MyAdapter(private val context: Context, val data: List<String>) : RecyclerView.Adapter<MyHolder>() {
        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<String>)这里将构造函数和需要传的参数结合一起,故不需要重写他的构造函数,同样在创建ViewHolder对象的时候也有一定的差异后面会讲到
    。也可以用下面比较传统的方式来表示

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

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

    ViewHolder

     class MyHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
         val textView = itemView.findViewById<TextView>(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

          本文链接:https://www.haomeiwen.com/subject/xzbrcftx.html