gpt4 book ai didi

android - 拖放 ConcurentModificationException

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:55 25 4
gpt4 key购买 nike

OnDragListener:

@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_ENTERED:
switch (v.getId()) {
case R.id.delete_zone: {
addToShowCaseZone.setImageDrawable(getResources().getDrawable(R.drawable.showcase_2));
inAddToShowcasesZone = true;
break;
}
case MagazineGridAdapter.ID: {
enteredView = v;
break;
}
}
return false;

case DragEvent.ACTION_DRAG_EXITED: {
switch (v.getId()) {
case R.id.delete_zone: {
addToShowCaseZone.setImageDrawable(getResources().getDrawable(R.drawable.showcase_1));

inAddToShowcasesZone = false;
break;
}
case MagazineGridAdapter.ID: {
enteredView = null;
break;
}
}
return true;
}
case DragEvent.ACTION_DRAG_STARTED:
return true;

case DragEvent.ACTION_DRAG_LOCATION:
return false;

case DragEvent.ACTION_DROP: {
if (inAddToShowcasesZone) {
final int position = gridView.getPositionForView(dragView);

Magazine magazine = magazineAdapter.getItem(position);

try {
new Magazine(magazine.getUrl().toString(), magazine.getImage(), magazine.getBackgroundNum(), magazine.getName());
} catch (MalformedURLException e) {
e.printStackTrace();
}

addToShowCaseZone.setImageDrawable(getResources().getDrawable(R.drawable.showcase_1));

inAddToShowcasesZone = false;

magazineAdapter.deleteFromList(position);

return false;

} else if(enteredView != null && !enteredView.equals(dragView)){
ResourcesForNativeMagazines.swapItems(gridView.getPositionForView(dragView), gridView.getPositionForView(enteredView), tabNumber - 1);

magazineAdapter.refreshValues(ResourcesForNativeMagazines.getMagazines(tabNumber - 1));

enteredView = null;

return false;
}

dragView.setVisibility(VISIBLE);

return false;
}
default:
dragView.setVisibility(VISIBLE);

return true;

}
}

适配器部分:

public void refreshValues(List<Magazine> magazines){
this.magazines = new ArrayList<>(magazines);
notifyDataSetChanged();
}

public void deleteFromList(int position){
magazines.remove(position);
notifyDataSetChanged();
}

有时,当我放下项目时,此代码会在方法 refreshValuews 和 deleteFromList 中调用错误,这是它的堆栈跟踪:

java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:806)
at java.util.HashMap$KeyIterator.next(HashMap.java:833)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1172)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1174)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1174)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1174)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1174)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1174)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1174)
at android.view.ViewRootImpl.handleDragEvent(ViewRootImpl.java:4911)
at android.view.ViewRootImpl.access$700(ViewRootImpl.java:94)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3188)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

我该如何解决?有没有其他方法可以通过拖放来修改 gridView 中的项目?

最佳答案

我找到了一个解决方案,不会导致您接下来应该做的异常:

public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_ENDED:{
v.post(new Runnable{
public void run() {
//SomeCode;
}
});
break;
}
}
}

关于android - 拖放 ConcurentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25601001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com