Kotlin编写RecyclerView的Adapter
来源:互联网 发布:安卓播放增益软件 编辑:程序博客网 时间:2024/06/05 23:03
Kotlin编写RecyclerView的Adapter
kotlin在现在的Android开发中已经较为常见,空闲之余学习一下还是非常必要的,没准儿哪天就可以利用它进行些骚操作呢(梦想还是要有的)。
利用Kotlin编写一个简单的Adapter
class SimpleAdapter(private val context: Context, private val data: List<String>) : RecyclerView.Adapter<SimpleAdapter.SimpleViewHolder>() { override fun onBindViewHolder(holder: SimpleViewHolder?, position: Int) { holder?.textView?.text = data[position] } override fun getItemCount(): Int = data.size override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): SimpleViewHolder = SimpleViewHolder(LayoutInflater.from(context) .inflate(R.layout.item_recycler, parent, false)) inner class SimpleViewHolder(view: View) : RecyclerView.ViewHolder(view) { var textView: TextView = view.findViewById(R.id.item_tv) }}
上面adapter完成了一个List集合数据的简单绑定,是不是发现相对于用Java实现同样功能代码更为精简。
在onBindViewHolder方法里面调用如下代码
holder?.textView?.setOnClickListener { Toast.makeText(context, "click", Toast.LENGTH_SHORT).show() }
为item中的控件设置监听器,至此一个简单的adapter编写完成。
Adapter中包含不同item类型
废话不多说直接上代码
class RecyclerAdapter(private val context: Context, private val data: List<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { private val HEADER = 0 private val NORMAL = 1 private val FOOTER = 2 override fun getItemCount(): Int = data.size override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder? = when (viewType) { HEADER -> { HeaderViewHolder(LayoutInflater.from(context). inflate(R.layout.item_header, parent, false)) } FOOTER -> { FooterViewHolder(LayoutInflater.from(context) .inflate(R.layout.item_footer, parent, false)) } else -> { RecyclerViewHolder(LayoutInflater.from(context) .inflate(R.layout.item_recycler, parent, false)) } } /** * 利用kotlin中的when代替Java中的if/else * 返回不同的item类型 */ override fun getItemViewType(position: Int): Int = when (position) { 0 -> { HEADER } itemCount - 1 -> { FOOTER } else -> { NORMAL } } /** * 根据不同的item类型绑定不同的数据 */ override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) { when (getItemViewType(position)) { HEADER -> { if (holder is HeaderViewHolder) { holder.tv.text = "I am Header" holder.tv.setOnClickListener { Toast.makeText(context, "I am Header", Toast.LENGTH_SHORT).show() } } } FOOTER -> { if (holder is FooterViewHolder) { holder.tv.text = "I am Footer" } } else -> { if (holder is RecyclerViewHolder) { holder?.textView?.text = data[position] holder.textView.setOnClickListener { Toast.makeText(context, "click", Toast.LENGTH_SHORT).show() } } } } } inner class RecyclerViewHolder(view: View) : RecyclerView.ViewHolder(view) { var textView: TextView = view.findViewById(R.id.item_tv) } class HeaderViewHolder(view: View) : RecyclerView.ViewHolder(view) { var tv: TextView = view.findViewById(R.id.tv_header) } inner class FooterViewHolder(view: View) : RecyclerView.ViewHolder(view) { var tv: TextView = view.findViewById(R.id.tv_footer) }}
全文字随便来张效果图吧
如果某个item中控件的监听器我不想写在或者不能写在(更新view某些原因导致的)onBindViewHolder方法中,ViewHolder该怎么写?
inner class FooterViewHolderTwo : RecyclerView.ViewHolder { constructor(view: View) : super(view) { tv = view.findViewById(R.id.tv_footer) tv.setOnClickListener { Toast.makeText(context, "I am Footer", Toast.LENGTH_SHORT).show() } } var tv: TextView }
注意:类FooterViewHolderTwo需要访问类RecyclerAdapter的成员context,需要用 inner 声明,不然是访问不到的哟!
接口的声明与调用
interface MyInterface { fun test(position: Int) }var myInterface: MyInterface? = nullfun setListener(myInterface: MyInterface?) { this.myInterface = myInterface }
很常规的操作
至此,关于Kotlin编写RecyclerView的Adapter就已介绍完毕!
阅读全文
0 0
- Kotlin编写RecyclerView的Adapter
- Kotlin的RecyclerView适配器
- Kotlin:编写Android适配器(Adapter)
- RecyclerView+RecyclerView.Adapter+RecyclerView.ViewHolder的使用
- RecyclerView万能的Adapter
- RecyclerView的万能Adapter
- RecyclerView.Adapter的封装
- RecyclerView.Adapter的实现
- RecyclerView 的 RecyclerView.Adapter 通用版的实现
- RecyclerView的Adapter的抽取
- RecyclerView的Adapter最佳实战
- Recyclerview Adapter 的简单封装
- RecyclerView的Adapter万能适配包
- RecyclerView.Adapter 的简单封装
- 通用的RecyclerView Adapter适配器
- 打造 RecyclerView的 通用Adapter
- 实现RecyclerView 的通用Adapter
- 通用的recyclerview adapter 适配
- 关于idea日志和控制台如何输出日志及乱码问题解决方案
- HOJ 2156 分数矩阵
- AR增强现实开发介绍(续)
- OAuth2.0认证
- 加油哦~
- Kotlin编写RecyclerView的Adapter
- Unity高通AR解析(一)
- 一名本科生如何入门学习机器学习
- 递归A 计算组合数
- 数据库概念模型和逻辑模型及物理模型
- 暗影精灵装双系统,win 10 下 装一个 win7 ,双硬盘(本文全程文字,没有图片)
- 超级Log工具,能显示你的文件名、方法、行数并且可以点击到那一行
- 智能指针(STL)
- tgz 压缩