Tôi đang triển khai drag'n'drop cho các chế độ xem. Khi kéo được bắt đầu, tôi đặt tầm nhìn của chế độ xem để INVISIBLE
, sau đó, nếu kéo bị gián đoạn - trở lại VISIBLE
:java.util.ConcurrentModificationException trong View.setVisibility
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Skipped some code
boolean dragStarted = v.startDrag(data, shadowBuilder, v, 0);
if (dragStarted) {
v.setVisibility(View.INVISIBLE)
}
}
}
Và:
if (event.getAction() == DragEvent.ACTION_DRAG_ENDED) {
View droppedView = (View) event.getLocalState();
droppedView.setVisibility(View.VISIBLE);
}
Và khi "Kéo kết thúc" sự kiện là gọi là, tôi nhận được ngoại lệ:
E/AndroidRuntime(7118): FATAL EXCEPTION: main
E/AndroidRuntime(7118): java.util.ConcurrentModificationException
E/AndroidRuntime(7118): at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
E/AndroidRuntime(7118): at java.util.HashMap$KeyIterator.next(HashMap.java:819)
E/AndroidRuntime(7118): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1046)
E/AndroidRuntime(7118): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1048)
E/AndroidRuntime(7118): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1048)
E/AndroidRuntime(7118): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1048)
E/AndroidRuntime(7118): at android.view.ViewRootImpl.handleDragEvent(ViewRootImpl.java:3471)
E/AndroidRuntime(7118): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2620)
E/AndroidRuntime(7118): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(7118): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(7118): at android.app.ActivityThread.main(ActivityThread.java:4575)
E/AndroidRuntime(7118): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(7118): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(7118): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
E/AndroidRuntime(7118): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
E/AndroidRuntime(7118): at dalvik.system.NativeStart.main(NativeMethod)
Tại sao và cách khắc phục?
về lý do tại sao ngoại lệ này xảy ra khi bạn chèn hoặc xóa một số yếu tố của một iterable, khi bạn đang iterating ngày đó. nhưng có vẻ như là một con bọ trong android. –
thử 'dropView.post (Runnable mới() {public void run() {droppingView.setVisibility (View.VISIBLE);}});' bạn sẽ cần phải thực hiện dropView final –
chỉ là một ý tưởng, nhưng bạn đã thử API chưa trình diễn? họ có một ví dụ kéo & thả đẹp ở đó. chỉ chơi với nó và thay đổi khả năng hiển thị chính xác khi bạn muốn. kể từ khi tôi không có một thiết bị với API11 +, tôi không thể kiểm tra nếu bất cứ điều gì tôi làm giúp (giả lập là không đủ vì nó đôi khi cho kết quả sai) –