-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Open
Description
版本: 4.1.4
问题:
4.x版本notifyItemChanged带payloads没有回调,示例代码如下
mAdapter[index] = newItem //这里其实已经调用了notifyItemChanged
mAdapter.notifyItemChanged(index, MomentAdapter.PAY_LOAD_UPDATE_LIKE) //再次调用notifyItemChanged带payloads 由于缓存原因或者更新间隔太短的拦截 此次更新是不会回调到onBindViewHolder()带payloads的方法的
原因:
由于新版的BaseQuickAdapter无法直接操作到data,只能通过adapter[position] = newItem的方式对指定位置的item数据进行更改,但是此方法会调用notifyItemChanged(position)
open operator fun set(@IntRange(from = 0) position: Int, data: T) {
if (position >= items.size) {
throw IndexOutOfBoundsException("position: ${position}. size:${items.size}")
}
mutableItems[position] = data
notifyItemChanged(position) //这一行调用了更新item
}
解决:
重写adapter的set方法,不进行notifyItemChanged,而是在使用的过程中自己手动调用notifyItemChanged
建议:
希望可以把BaseQuickAdapter的set方法中的notifyItemChanged进行移除,或者通过传多一个autoNotify参数,默认不通知,用户如果想顺便直接notifyItemChanged的话就传true
Metadata
Metadata
Assignees
Labels
No labels