DrawerLayout – Excepción que envía el evento de entrada

Recientemente empecé a usar el DrawerLayout en un nuevo proyecto hace una semana y todo funciona bien. Aparte de los momentos extraños al pasarlo adentro y afuera con mi dedo, se estrellará.

Si utilizo el ActionBar Up / Home MenuItem, sin embargo, funcionará bien cada vez.

En LogCat consigo dos stacktraces que parecen apuntar a los lugares androides internos, así que no sé muy bien qué hacer para solucionar esto.

Acabo de intentar crear una nueva aplicación para ver si era algo que estaba haciendo antes de que estaba causando esto, pero sucedió en la nueva aplicación también.

He creado la nueva aplicación con la plantilla de flujo maestro / detalle en la ventana "Nueva aplicación de Android", dejé todo como valores predeterminados y sólo cambié activity_item_list.xml para tener esto dentro de él:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/item_list" android:name="com.navdrawertest.ItemListFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" tools:context=".ItemListActivity" tools:layout="@android:layout/list_content" /> <!-- Navigation Drawer --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#111" /> </android.support.v4.widget.DrawerLayout> 

El DrawerLayout muestra y todavía puedo arrastrarlo desde el borde de la pantalla, pero todavía se bloquea en esta aplicación de prueba.

Aquí están los stacktraces que veo después de arrastrar con mi dedo:

 07-26 09:29:45.574: E/InputEventReceiver(19085): Exception dispatching input event. 07-26 09:29:45.574: E/MessageQueue-JNI(19085): Exception in MessageQueue callback: handleReceiveCallback 07-26 09:29:45.584: E/MessageQueue-JNI(19085): java.lang.NullPointerException 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.support.v4.widget.DrawerLayout.isContentView(DrawerLayout.java:840) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.support.v4.widget.DrawerLayout.onInterceptTouchEvent(DrawerLayout.java:866) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1852) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1966) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1418) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.app.Activity.dispatchTouchEvent(Activity.java:2424) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1914) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.View.dispatchPointerEvent(View.java:7564) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.os.MessageQueue.nativePollOnce(Native Method) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.os.MessageQueue.next(MessageQueue.java:132) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.os.Looper.loop(Looper.java:124) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at android.app.ActivityThread.main(ActivityThread.java:5103) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at java.lang.reflect.Method.invokeNative(Native Method) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at java.lang.reflect.Method.invoke(Method.java:525) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 07-26 09:29:45.584: E/MessageQueue-JNI(19085): at dalvik.system.NativeStart.main(Native Method) 07-26 09:29:45.584: D/AndroidRuntime(19085): Shutting down VM 07-26 09:29:45.584: W/dalvikvm(19085): threadid=1: thread exiting with uncaught exception (group=0x41cbb700) 07-26 09:29:45.594: E/AndroidRuntime(19085): FATAL EXCEPTION: main 07-26 09:29:45.594: E/AndroidRuntime(19085): java.lang.NullPointerException 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.support.v4.widget.DrawerLayout.isContentView(DrawerLayout.java:840) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.support.v4.widget.DrawerLayout.onInterceptTouchEvent(DrawerLayout.java:866) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1852) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910) 07-26 09:29:45.594: E/AndroidRuntime(19085): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1966) 07-26 09:29:45.594: E/AndroidRuntime(19085): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1418) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.app.Activity.dispatchTouchEvent(Activity.java:2424) 07-26 09:29:45.594: E/AndroidRuntime(19085): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1914) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.View.dispatchPointerEvent(View.java:7564) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.os.MessageQueue.nativePollOnce(Native Method) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.os.MessageQueue.next(MessageQueue.java:132) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.os.Looper.loop(Looper.java:124) 07-26 09:29:45.594: E/AndroidRuntime(19085): at android.app.ActivityThread.main(ActivityThread.java:5103) 07-26 09:29:45.594: E/AndroidRuntime(19085): at java.lang.reflect.Method.invokeNative(Native Method) 07-26 09:29:45.594: E/AndroidRuntime(19085): at java.lang.reflect.Method.invoke(Method.java:525) 07-26 09:29:45.594: E/AndroidRuntime(19085): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 07-26 09:29:45.594: E/AndroidRuntime(19085): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 07-26 09:29:45.594: E/AndroidRuntime(19085): at dalvik.system.NativeStart.main(Native Method) 

¿Hay algo que me falta aquí?

Editar: 10 días en y todavía no puede averiguar esto, ¿puedo al menos obtener la confirmación de que esto no es sólo para mí conseguir esto?

También tengo este mensaje de error pero al principio no pude averiguar qué lo causó. Después de hacer algunas pruebas en realidad me enteré de que la eliminación de todos los márgenes en la vista (en su ejemplo, el fragmento) parece eliminar el problema.

Así que en su caso sería:

 <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/item_list" android:name="com.navdrawertest.ItemListFragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ItemListActivity" tools:layout="@android:layout/list_content" /> 

Y puede establecer márgenes en todas las vistas dentro de este fragmento en su lugar (pero no lo he probado). Espero que ayude a alguien. Parece que este problema no es tan común.

Creo que he conseguido arreglar esto creando mis propias copias de los archivos que necesitaba del código fuente de la biblioteca de soporte y capturando la vista null en isContentView() .

Los archivos que necesitaba de la fuente eran:

  • ActionBarDrawerToggle.java
  • ActionBarDrawerToggleHoneycomb.java
  • DrawerLayout.java

Los puse en su propio paquete en mi proyecto y DrawerLayout nombre de DrawerLayout a FixedDrawerLayout . (Así que puedo decir fácilmente qué copia del DrawerLayout que estoy usando)

Entonces cambié isContentView() a:

 boolean isContentView(View child) { if(child == null){ return false; } return ((LayoutParams) child.getLayoutParams()).gravity == Gravity.NO_GRAVITY; } 

Después de intercambiar todas las referencias a la DrawerLayout en mi Activity a FixedDrawerLayout parece haberlo arreglado.

No estoy seguro si hay algo que puede suceder simplemente devolviendo false en isContentView() , pero no se isContentView() más y todavía es utilizable incluso cuando el child es nulo.

Sobre la base de la respuesta de Mike y el comentario de user1050133:

1) Crea el paquete android.support.v4.widget en tu aplicación

2) Agregue un nuevo archivo llamado FixedDrawerLayout con el siguiente contenido:

 public class FixedDrawerLayout extends DrawerLayout { public FixedDrawerLayout(Context context) { super(context); } public FixedDrawerLayout(Context context, AttributeSet attrs) { super(context, attrs); } public FixedDrawerLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override boolean isContentView(View child) { if (child == null) { return false; } return ((LayoutParams) child.getLayoutParams()).gravity == Gravity.NO_GRAVITY; } } 

3) Reemplazar todos los usos de DrawerLayout en xml con FixedDrawerLayout

Me enfrenté con un problema similar.

Puse una falsa onclick mathod para el diseño del fragmento

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f1f2f6" android:onClick="fragmentClick" android:orientation="vertical" > 

Puse el método onclick en el código de actividad java sólo por falso.

 public void fragmentClick(View v){ Log.i("fragmentClick", "fragmentClick"); return; } 

El problema fue resuelto.

Tuve el mismo problema al usar el cajón de navegación, y he resuelto el problema simplemente eliminando el android:focusableInTouchMode="true" del diseño raíz del fragmento.

  • Android + eclipse + maven + acciónbarsherlock
  • Error después de actualizar la AppCompat de Android.Support Library v7 a la versión 21.0.3
  • NullPointerException en FragmentManager
  • Biblioteca de soporte de Android v7: Error al recuperar el padre del elemento
  • Problema al eliminar la biblioteca supportV4
  • Advertencias de Proguard "no se puede escribir recurso (entrada de zip duplicado)"
  • Actualizar Android Support Library a 23.2.0 causa error: XmlPullParserException Archivo XML binario línea # 17 tag <vector> requiere viewportWidth> 0
  • Barra de herramientas: botón de menú de desbordamiento siempre mostrando
  • ¿Por qué se llama DialogFragment.onCreateView cuando se está destruyendo la actividad?
  • ¿Cuándo "ActionBarDrawerToggle" muestra sus cadenas "openDrawerContentDescRes" y "closeDrawerContentDescRes"?
  • En la aplicación android el método Toolbar.setTitle no tiene efecto - el nombre de la aplicación se muestra como título
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.