Kotlin 与RecycleView

作者: Kotyo | 来源:发表于2017-07-06 16:50 被阅读126次

    简介

    开始时我是用了下面的方式声明接口来做回调的,这么写是没问题的,用法也和Java里面一样,但是写完之后一想,这是Java的写法,难道Kotlin就没有自己的一套写法了?后来我又看了官方文档和一些资料,终于又被我找到它的一套写法。

    **普通接口方式 **

    interface IOnClickListener {
       operator fun invoke(position: Int)
    }
    

    好了,话不多说,下面的语法就是Kotlin型的Adapter,这也是我自己多次尝试和摸索出来的,应该也有其他的写法,就没有去尝试了。欢迎大家去尝试和发现,如果找到更好的写法,记得给我留个言啊= ̄ω ̄=

    class KotlinRecycleViewAdapter(var context: Context, var onClickListener: ((pos: Int,type:Int) -> Unit),var onItemClickListener: (pos: Int,type: Int) -> Unit) : RecyclerView.Adapter() {
    
    private var mList=listOf()
    
    fun appendList(list:List) {
      mList= list;
    }
    
    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): KotlinHolder {
      return KotlinHolder(View.inflate(context,R.layout.recycle_item_view, null),onClickListener,onItemClickListener)
    }
    
    override funonBindViewHolder(holder: KotlinHolder,position: Int) {
      holder.bindProductBean(mList[position],position)
    }
    
    //可以省略(:Int)
    override fungetItemCount()=mList.size
    
    classKotlinHolder(itemView: View, var onClickListener: (pos: Int,type: Int) -> Unit,var onItemClickListener: (pos: Int,type: Int) -> Unit) : RecyclerView.ViewHolder(itemView) {
    fun bindProductBean(product: ProdctBean,position: Int) {
      with(product){
        itemView.iv.setBackgroundResource(icon)
        itemView.tv.text=name
        //两种不同的写法
        iv.setBackgroundResource(icon)//iv.setBackgroundResource(product.icon)
        tv.text = name;//tv.text=product.name
        itemView.setOnClickListener{onItemClickListener(position,position)}
        itemView.iv.setOnClickListener{onClickListener(position,position)}
       }
      }
      }
    }
    

    好了,Adapter写完了,那咱们是不是就要用它了。

    val adapter= KotlinRecycleViewAdapter(this,{
    //下面吐司用的是字符串模板(kotlin自带的语法糖)
    //我是为了测试各种回调有没有用的,没有加入真正的逻辑
    //实际项目项目中小伙伴们可以根据自己的需求添加逻辑
    //这里使用的是Lambda表达式的语法
    pos,type->toast("pos--->$pos--->type--->$type")
    },{
    pos,type->toast("pos--->$pos--->type--->$type")
    })
    adapter.appendList(list)
    recycleView.adapter=adapter
    

    好了,这就写完了,这就是Kotlin样式的Adapter和它的用法。哈哈,码完收工。

    相关文章

      网友评论

        本文标题:Kotlin 与RecycleView

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