首先是重写 ViewHolder,参考了鸿洋大神的博客。
class RViewHolder(private val mContext: Context, val convertView: View) : ViewHolder(convertView) {
private val mViews: SparseArray<View>
init {
mViews = SparseArray()
}
/**
* 通过viewId获取控件
*
* @param viewId
* @return
*/
fun <T : View> getView(viewId: Int): T {
var view = mViews[viewId]
if (view == null) {
view = convertView.findViewById(viewId)
mViews.put(viewId, view)
}
return view as T
}
/****以下为辅助方法 */
/**
* 设置TextView的值
*
* @param viewId
* @param text
* @return
*/
fun setText(viewId: Int, text: String?): RViewHolder {
val tv = getView<TextView>(viewId)
tv.text = text
return this
}
fun setImageResource(viewId: Int, resId: Int): RViewHolder {
val view = getView<ImageView>(viewId)
view.setImageResource(resId)
return this
}
fun setImageBitmap(viewId: Int, bitmap: Bitmap?): RViewHolder {
val view = getView<ImageView>(viewId)
view.setImageBitmap(bitmap)
return this
}
fun setImageDrawable(viewId: Int, drawable: Drawable?): RViewHolder {
val view = getView<ImageView>(viewId)
view.setImageDrawable(drawable)
return this
}
fun setBackgroundColor(viewId: Int, color: Int): RViewHolder {
val view = getView<View>(viewId)
view.setBackgroundColor(color)
return this
}
fun setBackgroundRes(viewId: Int, backgroundRes: Int): RViewHolder {
val view = getView<View>(viewId)
view.setBackgroundResource(backgroundRes)
return this
}
fun setTextColor(viewId: Int, textColor: Int): RViewHolder {
val view = getView<TextView>(viewId)
view.setTextColor(textColor)
return this
}
fun setTextColorRes(viewId: Int, textColorRes: Int): RViewHolder {
val view = getView<TextView>(viewId)
view.setTextColor(mContext.resources.getColor(textColorRes))
return this
}
@SuppressLint("NewApi")
fun setAlpha(viewId: Int, value: Float): RViewHolder {
if (Build.