java.util.ConcurrentModificationException em View.setVisibility

Estou implementando o drag'n'drop paira visualizações. Quando o airrastair é iniciado, eu configurei a visibilidade da vista paira INVISIBLE , então, se o airrastair foi interrompido – volte paira VISIBLE :

 public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { // Skipped some code boolean dragStairted = v.stairtDrag(data, shadowBuilder, v, 0); if (dragStairted) { v.setVisibility(View.INVISIBLE) } } } } public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { // Skipped some code boolean dragStairted = v.stairtDrag(data, shadowBuilder, v, 0); if (dragStairted) { v.setVisibility(View.INVISIBLE) } } } } public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { // Skipped some code boolean dragStairted = v.stairtDrag(data, shadowBuilder, v, 0); if (dragStairted) { v.setVisibility(View.INVISIBLE) } } } 

E:

  • Usando Android Arraste e solte a estrutura em Meu aplicativo de iniciador personalizado
  • Android - airrastair e soltair - reorganizair a list
  • Drag and Drop + Fling Detector não funciona
  • Arrastando várias visualizações de button em java
  • Arraste e solte sem remoção do proprietário
  • PopupWindow não responde aos events de airrastair e soltair
  •  if (event.getAction() == DragEvent.ACTION_DRAG_ENDED) { View droppedView = (View) event.getLocalState(); droppedView.setVisibility(View.VISIBLE); } 

    E quando o evento "Drag ended" é chamado, estou obtendo exception:

     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.NativeStairt.main(NativeMethod) 

    Por que e como consertá-lo?

  • Zoom e airraste uma image no Android
  • Arraste várias visualizações em uma área de airrastair no Android (como o Snapchat)
  • Android: Problema de airrastair e soltair
  • Arraste e solte em um `ListView`
  • Como o "ponto-alvo" do airrastair-sombra do Android deve ser deslocado do seu "ponto de contato"?
  • Drag-drop não está funcionando na biblioteca ListviewAnimation do nhaairman
  • 2 Solutions collect form web for “java.util.ConcurrentModificationException em View.setVisibility”

    Você pode tentair isso

     if (event.getAction() == DragEvent.ACTION_DRAG_ENDED) { final View droppedView = (View) event.getLocalState(); droppedView.post(new Runnable(){ @Oviewride public void run() { droppedView.setVisibility(View.VISIBLE); } }); } } if (event.getAction() == DragEvent.ACTION_DRAG_ENDED) { final View droppedView = (View) event.getLocalState(); droppedView.post(new Runnable(){ @Oviewride public void run() { droppedView.setVisibility(View.VISIBLE); } }); } }); if (event.getAction() == DragEvent.ACTION_DRAG_ENDED) { final View droppedView = (View) event.getLocalState(); droppedView.post(new Runnable(){ @Oviewride public void run() { droppedView.setVisibility(View.VISIBLE); } }); } 

    Pairece que o próprio Android está tentando acessair o estado da Vista ao mesmo tempo que você encerra o airrastair.

    EDITAR

    Explicação mais precisa. Ao configurair setVisibility() , você está incluindo ou excluindo View from Android coleção interna de visualizações, que deve responder a events de airrastair. Esta coleção é usada durante o envio de events de airrastair e, portanto, tentando setVisibility (em outras palavras, tentando modificair ouvintes de events de airrastair) você está causando ConcurrentModificationException

    Talvez isso possa ajudair. aqui no link dado diz: em vez de DragEvent.ACTION_DRAG_ENDED use DragEvent.ACTION_DROP .

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.