Skip to content

4.x版本notifyItemChanged带payloads没有回调问题的解决和建议 #6782

@chaychan

Description

@chaychan

版本: 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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions