QuickViewHolder是什么东西呢,顾名思义就是快速轻便的ViewHolder,视图持有器。
那此组件有什么特点:
不需要根据Layout定义一大堆View,再一个一个findViewById,集成了常用绑定数据的方法,适配于所有Widget持有对象,例如RecyclerView,ListView,GroupListView等甚至连Activity与Fragment都可以。扩展灵活,代码兼容。
接下来我们看一下正常写法:
for example: 定义一个RecyclerViewViewHolder
inner class ViewHolder : RecyclerView.ViewHolder {
lateinit var titleTv: TextView
lateinit var userNameTv: TextView
lateinit var ageTv: TextView
lateinit var contentTv: TextView
lateinit var coverIv: ImageView
...
constructor(itemView: View) : super(itemView) {
titleTv=itemView.findViewById(R.id.titleTv)
userNameTv
ageTv
contentTv
coverIv
...
}
}
大概就是这样了,item项内有多少个View,就要定义多少个View用于findViewById。是个体力活
那么,接下来看下QuickViewHolder的写法
viewHolder.setText(R.id.toastMsgTv, "", View.OnClickListener {
QuickToast.showToastDefault("点击了内容")
}).setText(R.id.toastMsgTv, "")
.setImg(R.id.coverIv, R.mipmap.ic_launcher)
.setImgRoundRect(R.id.coverIv, 5.0F, R.mipmap.ic_launcher)
.setImgCircle(R.id.coverIv, R.mipmap.ic_launcher, View.OnClickListener {
QuickToast.showToastDefault("点击了头像")
})
...
全程使用链式的方式绑定数据,包括设置Listener。如果需要获取对象也可以直接通过getView或者getTextView获取到
viewHolder.getView<TextView>(R.id.toastMsgTv)
viewHolder.getImageView(R.id.coverIv)
使用起来是不是简洁方便多了,去掉了令人恼火的定义变量View。
配置信息
由于图片加载框架各类烦多,考虑到兼容性,设置网络图片需要自定义实现
class BaseViewHolder(itemView: View) : QuickViewHolder(itemView) {
override fun bindImg(context: Context, url: String, imageView: ImageView): QuickViewHolder {
//在这里绑定普通图片
return super.bindImg(context, url, imageView)
}
override fun bindImgRoundRect(context: Context, url: String, radius: Float, imageView: ImageView): QuickViewHolder {
//在这里绑定圆角图片
return super.bindImgRoundRect(context, url, radius, imageView)
}
override fun bindImgCircle(context: Context, url: String, imageView: ImageView): BaseViewHolder {
//在这里绑定圆形图片
return this
}
}
继承QuickViewHolder重写上述三个方法即可。
end---------
推荐使用gradle接入
implementation 'org.quick.android:quick-component:latest.release'
统一初始化放在Application中:
QuickAndroid.init(this)
好了,到这里就结束,好东西那当然要分享了,马上告诉小伙伴我发现了一个很酷的东西吧。
QuickAndroid系列全家桶