Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


ArrayIndexOutOfBoundsException mientras descarta Snackbar / ViewDragHelper

Después de implementar la nueva Snackbar en algunas de mis aplicaciones, estoy recibiendo el siguiente error:

 java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at android.support.v4.widget.ViewDragHelper.shouldInterceptTouchEvent(SourceFile:1014) at android.support.design.widget.SwipeDismissBehavior.onInterceptTouchEvent(SourceFile:188) at android.support.design.widget.Snackbar$Behavior.onInterceptTouchEvent(SourceFile:659) at android.support.design.widget.Snackbar$Behavior.onInterceptTouchEvent(SourceFile:641) at android.support.design.widget.CoordinatorLayout.performIntercept(SourceFile:343) at android.support.design.widget.CoordinatorLayout.onInterceptTouchEvent(SourceFile:376) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1827) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1968) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1420) at android.app.Activity.dispatchTouchEvent(Activity.java:2428) at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(SourceFile:59) at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(SourceFile:59) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1916) at android.view.View.dispatchPointerEvent(View.java:7475) at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3744) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3672) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4924) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4884) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5036) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179) at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:171) at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5004) at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5058) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) at android.view.Choreographer.doCallbacks(Choreographer.java:579) at android.view.Choreographer.doFrame(Choreographer.java:546) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityThread.java:5299) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(Native Method) 

Estoy utilizando la misma configuración aquí: https://github.com/chrisbanes/cheesesquare/blob/master/app/src/main/java/com/support/android/designlibdemo/MainActivity.java

 public class MainActivity extends AppCompatActivity { private Snackbar snackbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // if showing already, close if (this.snackbar != null) { this.snackbar.dismiss(); } // make new snackbar this.snackbar = Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG).show(); // chris banes example // Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG).setAction("Action", null).show(); } }); } @Override public void onPause() { super.onPause(); // dismiss when user clicks "home" if (this.snackbar != null) { this.snackbar.dismiss(); } } } 

Resumen:

  • Estoy usando la Snackbar
  • Estoy usando el CoodinartorLayout
  • No estoy usando el DrawerLayout

Temas de Google:

  • Http://code.google.com/p/android/issues/detail?id=175501
  • Http://code.google.com/p/android/issues/detail?id=103888

Basado en el android.support.v4.widget.ViewDragHelper.shouldInterceptTouchEvent(SourceFile:1014) at línea en la Excepción, supongo que tiene que ver con la "despedida" de la Snackbar ?

Tal vez no debería dismiss el Snackbar en onPause ? Solía ​​hacer esto con Toast s.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.