NotifyItemRemoved引起一些奇怪的视觉伪像。 ArrayList中的实际值已正确更改,只是没有正确地设置动画/清除屏幕。
点击项目之前
在这里您可以看到回收站视图。
点击项目后
单击一个项目后,它会提示确认消息。
确认项目后
确认一项后,文本会更改颜色。
点击眼睛后
理想情况下,单击项目可以隐藏所有选定的项目。 而是,该项目无法正确擦除。
项目未被删除
可点击的项目后面
实际上,该项目存在于未擦除项目的后面。
未擦除的项目被绘制在上方
有更多要擦除的项目会导致更多相同的错误。
点击眼睛会从其应有的位置(缺少马里奥装备)开始执行recyclerview,然后制作动画。
将项目读取到arrayList
for (int team = 0; team < 4; team++) {
for (int index = 0; index < spDrafted.get(team).size(); index++) {
adapter.notifyItemInserted(spDrafted.get(team).get(index).getPosition());
Log.d(TAG, "Eye Instered " + spDrafted.get(team).get(index).getName());
resetPositions();
}
}
从arrayList中删除项目
for (int team = 0; team < 4; team++) {
for (int index = 0; index < spDrafted.get(team).size(); index++) {
adapter.remove(spDrafted.get(team).get(index));
Log.d(TAG, "Eye removed " + spDrafted.get(team).get(index).getName());
resetPositions();
}
}
recyclerviewadapter中的删除功能
void remove(character character) {
fighters.remove(character);
notifyItemRemoved(character.getPosition());
Log.d(TAG,""+fighters.toString());
// notifyItemRangeChanged(character.getPosition(),fighters.size());
}
字符类
package com.example.smashdraft;
import java.io.Serializable;
public class character implements Serializable, Comparable<character> {
private int imageId;
private String name;
private int team;
private int position;
character(int image, String name){
this.imageId = image;
this.name = name;
this.team = 0;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getTeam() {
return team;
}
public void setTeam(int team) {
this.team = team;
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
@Override
public int compareTo(character ch) {
return this.getName().compareTo(ch.getName());
}
@Override
public String toString(){
return this.name;
}
}
位置是角色在战斗机ArrayList中的位置,每次更新arrayList后都会更新位置。 如您所见,我尝试添加notifyItemRangeChanged,这将导致项目开始动画,然后跳回到其先前位置。
Notifydatasetchanged()可以正常工作,除了没有动画。