Why does a slide keyboard break my application?

If I physically push the keyboard out on my Moto Droid A855, this will crash my test application with the stack inserted below. I do not understand why?

In addition, if I launch the application with a keyboard, my application immediately fires at startup.

An application consists of an action that contains a viewflipper as the main layout of the view. There are two line outputs in the view ...

Stack trace:

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: Added XML format and corresponding fragments from the main action.

Entire XML Layout File

 <?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> 

Code snippets from the main operation:

 /** * 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(); } } } 
+9
android crash viewflipper
Jun 11 '10 at 1:20
source share
4 answers

To solve this problem you must

  • Define a new class called MyViewFlipper that overrides ViewFlipper (see below)
  • Link to a new class anywhere you previously referenced ViewFlipper
  • Define your class and layout as shown below:

The new class is called MyViewFlipper . Contains the following:

 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(); } } } 

Now, to use this "fixed" version of ViewFlipper , you need to reference it in the xml layout. Since this is basically a "custom view", you need to fully define the package path to MyViewFlipper , as shown here:

 <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> 

Now the application ceases to fail on the keyboard slide event or if the application is launched with the slide already released. Look for this in the log:

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

Credit: http://code.google.com/p/android/issues/detail?id=6191

+21
Jun 12 '10 at 0:14
source share

It is really difficult for you to help if you do not provide part of your code ... in any case, this error is not new, and there are some workarounds to solve it (I think this is some error) ... try to do this:

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

This is for overriding onDetachedFromWindow , and I hope this works for you.

+5
Jun 11 '10 at 1:29
source share

I know that this question was asked almost two years ago, but since then a very simple correction has been made. Just add android:configChanges="orientation|keyboard|keyboardHidden" to each Activity call in the manifest.

+2
May 24 '12 at 15:09
source share

Yes, I do not see this error before ... but again I have it in my manifest

  <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> 
0
Jun 01 '14 at 3:25
source share



All Articles