为什么键盘滑动会使我的应用程序崩溃?

编程入门 行业动态 更新时间:2024-10-07 02:18:31
本文介绍了为什么键盘滑动会使我的应用程序崩溃?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

如果我在 Moto Droid A855 上以物理方式滑出键盘,它会使我的测试应用程序崩溃,并在下面粘贴堆栈跟踪.我不明白为什么?

If I physically slide out the keyboard on my Moto Droid A855, it crashes my test app with the stack trace pasted below. I don't understand why?

另外,如果我在不使用键盘的情况下启动我的应用程序,我的应用程序会在启动时立即崩溃.

Also, if I start my app with the keyboard out, my app crashes immediately on startup.

该应用由一个 Activity 组成,其中包含一个 viewflipper 作为主视图布局.viewflipper 包含两个线性布局...

The app consists of an activity, which contains a viewflipper as the main view layout. The viewflipper contains two linearlayouts...

堆栈跟踪:

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

添加 XML 布局和主要活动的相关片段.

added XML layout and relevant snippets from main activity.

整个 XML 布局文件

Entire XML layout file

<?xml version="1.0" encoding="utf-8"?> <ViewFlipper xmlns:android="schemas.android/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>

主要活动的代码片段:

/** * Attempt (not currently working) to work around this bug: code.google/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(); } } }

推荐答案

要解决这个问题,你必须

To resolve this issue you must

  • 定义一个名为 MyViewFlipper 的新类,它会覆盖 ViewFlipper(见下文)
  • 在您之前引用过的任何地方引用该新类 ViewFlipper
  • 如下所示定义您的类和布局:
  • Define a new class called MyViewFlipper which overrides ViewFlipper (see below)
  • Reference that new class anywhere you would have previously referenced ViewFlipper
  • Define your class and layout as shown below:

名为 MyViewFlipper 的新类.包含以下内容:

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

现在要使用 ViewFlipper 的固定"版本,您必须在 xml 布局中引用它.由于它基本上是一个自定义视图",因此您必须完全限定 MyViewFlipper 的包路径,如下所示:

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

<com.gtosoft.dash.MyViewFlipper xmlns:android="schemas.android/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 app no longer crashes on the keyboard slide event or if the app is started with slide already out. Look for this in the log:

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

信用:code.google/p/android/issues/detail?id=6191

更多推荐

为什么键盘滑动会使我的应用程序崩溃?

本文发布于:2023-11-05 10:25:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1560580.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:会使   应用程序   键盘

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!