Android notifyItemRemoved() 通知了错误的索引

Android notifyItemRemoved() Wrong Index notified

美好的一天。我有一个小型聊天应用程序,我想在其中简单地删除本地的聊天项目。

通过四处调试,我可以估计 notifyItemRemoved() 有问题,如下所示:

• 我已经调试了从我的列表中返回的索引,并且该索引对于列表是正确的。

• 我已经调试了从 ViewHolder 返回的模型 Class,返回的模型 class 是正确的。

• 我在我的模型中调试了我的自定义 equals() 方法,它正在正确比较返回正确的项目。

关于我的调试的主要抱怨是我不知道为什么,但是 equals() 方法被调用了 2 次...很奇怪,但是如果你有时间请也考虑一下这种情况。

主要问题是 notifyItemRemoved() 总是删除不正确的项目,但总是在必须删除的项目之上的 1 项目(在删除的意思上,我的意思是从视图中删除,因为正在从列表中删除正确)

所以我不知道这里发生了什么。

这是我的自定义 equals() 方法

  @Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (obj instanceof ChatModel) {
        ChatModel chatModel = (ChatModel) obj;
        if (chatModel.getMessageId().equals(messageId)) {
            return true;
        }
    }
    return false;
}

@Override
public int hashCode() {
    return messageId.hashCode();
}

下面是我如何将项目插入适配器列表。

求机型列表->

 public void insertChatModelWithItemNotify(List<ChatModel> chatModel, boolean firstPaging) {
    if (firstPaging) {
        this.chatModelList.addAll(chatModel);
        notifyDataSetChanged();
    } else {
        this.chatModelList.addAll(0, chatModel);
        notifyItemRangeInserted(0, chatModel.size());
    }
}

对于单个模型 - >

    public void insertChatModel(ChatModel chatModel) {
    this.chatModelList.add(chatModel);
    notifyDataSetChanged();
}

这是我从列表中删除项目的方法

  public void removeItem(ChatModel chatModel) {
    int position = this.chatModelList.indexOf(chatModel);
    this.chatModelList.remove(chatModel);
    notifyItemRemoved(position);
}

有什么想法吗?

您可能正在向 RecyclerView 添加某种 header,这使得 object 列表中的 object 索引不同于 RecyclerView 中的视图索​​引。