¿Por qué la caída del teclado bloquea mi aplicación?

Si físicamente deslice el teclado en mi Moto Droid A855, se bloquea mi aplicación de prueba con la pila de seguimiento pegado a continuación. No entiendo por qué

Además, si inicio mi aplicación con el teclado, mi aplicación se bloquea inmediatamente al inicio.

La aplicación consiste en una actividad, que contiene un viewflipper como el diseño de la vista principal. El viewflipper contiene dos lineares …

Rastro de la pila:

06-10 21:10:17.652 E/AndroidRuntime( 3785): Uncaught handler: thread main exiting due to uncaught exception 06-10 21:10:17.668 E/AndroidRuntime( 3785): java.lang.IllegalArgumentException: Receiver not registered: android.widget.ViewFlipper$1@447af0b8 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.app.ActivityThread$PackageInfo.forgetReceiverDispatcher(ActivityThread.java:667) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.app.ApplicationContext.unregisterReceiver(ApplicationContext.java:747) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:321) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.widget.ViewFlipper.onDetachedFromWindow(ViewFlipper.java:104) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.View.dispatchDetachedFromWindow(View.java:5835) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1076) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.ViewRoot.dispatchDetachedFromWindow(ViewRoot.java:1570) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.ViewRoot.doDie(ViewRoot.java:2556) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.ViewRoot.die(ViewRoot.java:2526) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:218) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.view.Window$LocalWindowManager.removeViewImmediate(Window.java:436) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3498) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3599) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.app.ActivityThread.access$2300(ActivityThread.java:119) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1867) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.os.Handler.dispatchMessage(Handler.java:99) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.os.Looper.loop(Looper.java:123) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at android.app.ActivityThread.main(ActivityThread.java:4363) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at java.lang.reflect.Method.invokeNative(Native Method) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at java.lang.reflect.Method.invoke(Method.java:521) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 06-10 21:10:17.668 E/AndroidRuntime( 3785): at dalvik.system.NativeStart.main(Native Method) 06-10 21:10:17.684 I/Process ( 1017): Sending signal. PID: 3785 SIG: 3 

EDIT: diseño XML añadido y fragmentos relevantes de la actividad principal.

Todo el archivo de diseño XML

 <?xml version="1.0" encoding="utf-8"?> <ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/vFlipper" android:layout_width="wrap_content" android:layout_height="wrap_content"> <!-- Linear Layout 1: messages and overview. --> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TableRow android:id="@+id/TableRow01" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:text="Connection info" android:id="@+id/tvCon1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#F0F0F0" android:textColor="#FF0000" /> </TableRow> <ScrollView android:id="@+id/ScrollView01" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/tvMessages" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="" /> </ScrollView> </LinearLayout> <!-- Linear Layout 2: settings --> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TableRow android:id="@+id/TableRow03" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:text="hello world" android:id="@+id/asdfasdf2" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </TableRow> </LinearLayout> </ViewFlipper> 

Extractos de código de la actividad principal:

 /** * Attempt (not currently working) to work around this bug: http://code.google.com/p/android/issues/detail?id=6191 * TODO: make it work. */ @Override public void onDetachedFromWindow() { Log.d("Dash","OnDetachedFromWindow()"); try { super.onDetachedFromWindow(); } catch (Exception e) { ViewFlipper v = (ViewFlipper)findViewById(R.id.vFlipper); if (v != null) { Log.d("Dash","De-Bug hit. e=" + e.getMessage()); v.stopFlipping(); } } } 

Para resolver este problema, debe

  • Defina una nueva clase llamada MyViewFlipper que reemplaza a ViewFlipper (ver abajo)
  • Referencia de que la nueva clase en cualquier lugar que se han mencionado anteriormente ViewFlipper
  • Defina su clase y diseño como se muestra a continuación:

Nueva clase llamada MyViewFlipper . Contiene lo siguiente:

 package com.gtosoft.dash; // change this to match your own app. import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.widget.ViewFlipper; public class MyViewFlipper extends ViewFlipper { public MyViewFlipper(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDetachedFromWindow() { try{ super.onDetachedFromWindow(); }catch(Exception e) { Log.d("MyViewFlipper","Stopped a viewflipper crash"); stopFlipping(); } } } 

Ahora, para usar esta versión "fija" de ViewFlipper tienes que hacer referencia a ella en el diseño xml. Puesto que es básicamente una "vista personalizada", tiene que calificar completamente la ruta del paquete a MyViewFlipper , como se ve aquí:

 <com.gtosoft.dash.MyViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/vFlipper" android:layout_width="wrap_content" android:layout_height="wrap_content"> (insert all the other old layout code here) </com.gtosoft.dash.MyViewFlipper> 

Ahora la aplicación ya no se bloquea en el evento de diapositivas de teclado o si se inicia la aplicación con la diapositiva ya fuera. Busque esto en el registro:

 06-11 20:08:15.811 D/MyViewFlipper( 6106): Stopped a viewflipper crash 

Crédito: http://code.google.com/p/android/issues/detail?id=6191

Es realmente difícil ayudarte si no proporcionas alguna parte de tu código … de todos modos, este error no es nuevo y hay algunas soluciones para solucionarlo (supongo que es un error) … intenta hacer esta:

 @Override protected void onDetachedFromWindow() { try { super.onDetachedFromWindow(); } catch (IllegalArgumentException e) { stopFlipping(); } } 

Esto es para reemplazar el onDetachedFromWindow y espero que funcione para usted.

Sé que esta pregunta fue hecha hace casi dos años, pero desde entonces se ha implementado una solución muy fácil. Simplemente añada android:configChanges="orientation|keyboard|keyboardHidden" en cada llamada de Actividad en el Manifiesto.

Sí, no veo este error antes .. pero de nuevo tengo esto en mi manifiesto

  <activity android:name=".MainActivity" android:configChanges="keyboardHidden|navigation" android:label="@string/app_name" android:launchMode="singleTop" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 
  • Cómo deshabilitar Home y otros botones del sistema en Android?
  • "Código de error 5: la base de datos está bloqueada" cuando se utiliza un ContentProvider
  • Por qué el flag isLockTaskPermitted es falso
  • Encriptación y bloqueo de bases de datos Android
  • ¿Cuál es la diferencia entre isDeviceLocked y isKeyguardSecure en el KeyguardManager de android?
  • Android: el proceso ha muerto
  • ¿Cuáles son las mejores formas de bloquear las aplicaciones de Android?
  • Android: la base de datos está bloqueada
  • Deshabilitado Bloqueo de teclado Bloqueo se vuelve a habilitar después de hacer clic en una notificación
  • Actualización y bloqueo de CountDownTimer
  • Bloquear el dispositivo android mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.