ItemTouchHelper实现拖动分组与定制

Android 在 RecyclerView 中使用了 ItemTouchHelper 来支持列表项的移动、横扫功能。
最近在项目中用到了这部分功能,并且有限定拖动触发区域、拖动范围限制的要求,在此做一点记录。

阅读全文

Kotlin 中 forEach 的中断

想要一个 break

相较于原生的 for 关键字, kotlin (包括 1.8 版本后的 Java) 为集合引入了符合函数式编程范式的 forEach 方法,提升了代码编写的体验。

阅读全文

RecyclerView 中 ViewHolder 的异步回调实现

在使用 RecyclerView 实现卡片的流布局的页面中,经常会出现卡片内有业务逻辑,有请求接口、查询数据库等异步耗时操作。
有开发同学可能会基于代码复用的考虑,将异步操作的发起和回调写在 ViewHolder 或者 widget 控件里:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val button: BizButton
var bizData: BizData

init {
button.setOnClickListener {
//在工作线程里发起网络请求,在请求返回后调用 onBizSuccess()
button.startBiz(bizData, object: BizListener {
override fun onBizSuccess() {
bizData.doSomeThing()
updateUI()
}
})
}
}

fun bind(data: BizData) {
bizData = data
}

fun updateUI() {
//to update you view holder
}
}

阅读全文