背景:
某个item上有个textview用来显示时间,时间的值从外部传入,每100毫秒就刷新一次。
处理:
使用notifyItemChanged(int position,@Nullable Object palload)方法,进行局部刷新处理
/**
* Notify any registered observers that the item at <code>position</code> has changed with
* an optional payload object.
*
* <p>This is an item change event, not a structural change event. It indicates that any
* reflection of the data at <code>position</code> is out of date and should be updated.
* The item at <code>position</code> retains the same identity.
* </p>
*
* <p>
* Client can optionally pass a payload for partial change. These payloads will be merged
* and may be passed to adapter's {@link #onBindViewHolder(ViewHolder, int, List)} if the
* item is already represented by a ViewHolder and it will be rebound to the same
* ViewHolder. A notifyItemRangeChanged() with null payload will clear all existing
* payloads on that item and prevent future payload until
* {@link #onBindViewHolder(ViewHolder, int, List)} is called. Adapter should not assume
* that the payload will always be passed to onBindViewHolder(), e.g. when the view is not
* attached, the payload will be simply dropped.
*
* @param position Position of the item that has changed
* @param payload Optional parameter, use null to identify a "full" update
* @see #notifyItemRangeChanged(int, int)
*/
public final void notifyItemChanged(int position, @Nullable Object payload) {
mObservable.notifyItemRangeChanged(position, 1, payload);
}
代码:
class AdapterPayAmount(
layoutResId: Int = R.layout.adapter_pay_amount,
data: MutableList<BeanGoodsInfo>? = null
) :
BaseQuickAdapter<BeanGoodsInfo, BaseViewHolder>(layoutResId, data) {
var selTime by Delegates.observable("") { _, old, new ->
if (old != new && itemCount > 1) {
notifyItemChanged(itemCount - 1,1)
}
}
override fun convert(holder: BaseViewHolder, item: BeanGoodsInfo, payloads: List<Any>) {
super.convert(holder, item, payloads)
val mTvTime = holder.getView<TextView>(R.id.tv_time)
mTvTime.text = selTime
}
override fun convert(holder: BaseViewHolder, item: BeanGoodsInfo) {
}
}