亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

在Kotlin編寫RecyclerView適配器

標簽:
Android

通过创建RecyclerView适配器,Kotlin可以简化您的生活,这是一个有趣的方法。

 

在这个方法中,您可以看到更易阅读的代码组织,且避免冗余代码。

 

Kotlin的RecyclerView适配器

 

我们创建一个适配器时,要设置标题和将图形插入进各单元内。

 

我们不允许项目的更改,这就是个非常简单的适配器。如果我们要更新数据,就需要创建新的适配器,并将数据设置到RecyclerView中。

 

模型

 

 

我们也用一个非常简单的模型,它仅需要一个标识符、标题和图形的URL。

 

我们将用一个数据类:

1 data class Item(val id: Long, val title: String, val url: String)

 

这样我们就已经有一个类和它的构造函数、不可变属性、以及一些有用的函数实现,如:equals 或 hashCode

 

适配器

 

适配器的结构如下,它自创建一些必须的方法:

复制代码

 1 class MyAdapter : RecyclerView.Adapter() {  2        3     override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {  4     }  5    6     override fun onBindViewHolder(holder: ViewHolder?, position: Int) {  7     }  8    9     override fun getItemCount(): Int { 10     } 11   12     class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) 13 }

复制代码

 

您将看见我已经创建了一个由原始ViewHolder扩展而来的ViewHolder类。

 

这是因为适配器需要原始抽象类的实现。

 

另外,有些元素被标注为nullable。这是因为如果库没有适当的@Nullable@NonNull标注,Kotlin就没有方法知道null是否允许,这就要让我们来决定了。

 

如果我们通过默认方式自创建方法了,它就会认为其值是nullable。

 

但是,进一步研究支持库,我们就知道哪些值是为null,所以我们能够删除它。

复制代码

 1 class MyAdapter : RecyclerView.Adapter() {  2       3     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {  4     }  5    6     override fun onBindViewHolder(holder: ViewHolder, position: Int) {  7     }  8    9     override fun getItemCount(): Int { 10     } 11   12     class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) 13 }

复制代码

 

构造函数

 

适配器需要接收参数项目和侦听器。这就像这样:

class MyAdapter(val items: List, val listener: (Item) -> Unit)

 

方法的实现非常容易。扩展函数方法膨胀视图:

复制代码

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(parent.inflate(R.layout.view_item))   override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(items[position], listener)   override fun getItemCount() = items.size

复制代码

 

有三个方法可以实现由简约的形式,获得以前的结果。用三行我们就实现了完整的适配器。

 

现在就去实现ViewHolder

 

ViewHolder

 

ViewHolder由模型分配值到它们相应的视图:

复制代码

1 class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 2     fun bind(item: Item, listener: (Item) -> Unit) = with(itemView) { 3         itemTitle.text = item.title 4         itemImage.loadUrl(item.url) 5         setOnClickListener { listener(item) } 6     } 7 }

复制代码

 

这里的每件事都已经在其他文章中读到:with函数、ImageView的loadUrl扩展函数用Kotlin Android扩展访问视图,和点击侦听器的映射

 

适配器赋值

 

现在仅剩一件事:将适配器赋值到视图:

1 recycler.layoutManager = GridLayoutManager(this, 2) 2 recycler.adapter = MyAdapter(items) { 3     toast("${it.title} Clicked") 4 }

 

最后一个函数是侦听器,它接收一项。当您点击这项时,代码就简单地将标题打印到该项上。

 

结论

 

在Kotlin中实现RecyclerView就这么简单。

 

到目前为止,我们使用一些学过的工具,已将代码简化到最低程度。

原文链接:http://www.apkbus.com/blog-871347-68030.html

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消