Kotlin 与RecycleView简介

简介

开始时我是用了下面的方式声明接口来做回调的,这么写是没问题的,用法也和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和它的用法。哈哈,码完收工。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3929
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2626
来自专栏落花落雨不落叶

canvas画简单电路图

65111
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2675
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4055
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2902
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4074
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2232
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

7148

扫码关注云+社区