美好的一天。我有一个小聊天应用程序,我只想在本地删除聊天项目。
通过调试我可以认为notifyItemRemoved()有问题,如下所示:
•我已经从我的List中调试了返回的索引,并且索引对于列表是正确的。
•我已经从ViewHolder调试了返回的Model 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());
}
}
对于单个模型 - &gt;
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);
}
有什么想法吗?
答案 0 :(得分:0)
您可能在RecyclerView中添加了某种标题,这使得对象列表中的对象索引与RecyclerView中的View索引不同。