0

開発者ドキュメントでこのエラーが発生していますが、その理由がわかりません。ここにあるいくつかの電話でテストしましたが、問題はありませんでした。

private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;

              private void swipeInit() {

                    viewFlipper = (ecm2.android.ContentViewFlipper) findViewById(R.id.statusFlipper);
                    slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
// line 2366        slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); //error
                    slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
                    slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
}

ログエラー

java.lang.RuntimeException: Unable to start activity ComponentInfo{ecm2.android/ecm2.android.MainActivity}: java.lang.ClassCastException: android.widget.ViewFlipper
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1833)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1854)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1041)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4333)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: android.widget.ViewFlipper
at ecm2.android.MainActivity.swipeInit(MainActivity.java:2366)
at ecm2.android.MainActivity.onCreate(MainActivity.java:837)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1797)

ログには、アニメーションの 1 つを設定している 2366 行にあると書かれていますが、その前に問題なく実行されるため、ここで問題が発生するかどうかはわかりません

アニメーション xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300"/>

これはすべて、Android のバグを回避するためにカスタム ビューフリッパーに切り替えたときに始まりました。例外をキャッチしようとすることを除いて、実際には何もしonDetachedFromWindowません。使用するすべてのものでスーパーを呼び出すので、通常はすべてのことを行います

編集:

ContentViewFlipper クラス

public class ContentViewFlipper extends ViewFlipper {
//class is used to try to prevent force closes on certain phone where the onDetachFromWindow would be 
//called when its not suppose to, this is an android bug

public ContentViewFlipper(Context context) {
    super(context);
}

public ContentViewFlipper( Context context, AttributeSet attrs ) {
      super( context, attrs );
   }

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

viewFlipperの宣言

private ContentViewFlipper viewFlipper;

XML

<ecm2.android.ContentViewFlipper
    android:id="@+id/statusFlipper"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/incLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="40dp"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/lvIncidents"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:divider="@drawable/divider"
            android:dividerHeight="2dip"
            android:visibility="visible" >
        </ListView>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/statusLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" android:layout_marginBottom="40dp">

        <ListView
            android:id="@+id/lvStatus"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:choiceMode="singleChoice"
            android:divider="@drawable/divider"
            android:dividerHeight="2dip"
            android:visibility="visible" android:layout_marginTop="50dp">
        </ListView>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/dlLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" android:layout_marginBottom="40dp">

        <ListView
            android:id="@+id/lvDistList"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:divider="@drawable/divider"
            android:dividerHeight="2dip"
            android:visibility="visible" android:layout_marginTop="50dp">
        </ListView>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/emNotesLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" android:layout_marginBottom="40dp">

        <ListView
            android:id="@+id/lvEmNotes"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" android:layout_marginTop="50dp">
        </ListView>

    </LinearLayout>


    <LinearLayout
        android:id="@+id/stCalenLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" android:layout_marginBottom="40dp">

        <ListView
            android:id="@+id/lvStCalendar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" android:layout_marginTop="50dp">
        </ListView>

    </LinearLayout>

</ecm2.android.ContentViewFlipper>
4

2 に答える 2

0

例外は、エラーがキャストで発生したことを示しているため、行のどちらかの側の型が間違っているandroid.widget.ViewFlipperと確信しています。viewFlipper = ...

viewFlipper変数が でandroid.widget.ViewFlipperあり、レイアウトのコントロールが であり、ecm2.android.ContentViewFlipperにキャストできないかandroid.widget.ViewFlipper、またはレイアウト内のコントロールがandroid.widget.ViewFlipperにキャストできないecm2.android.ContentViewFlipperです。

行にブレークポイントを設定した後、デバッグ モードでコードをシングル ステップ実行すると、実際にエラーが発生するのはどのviewFlipper = ...行ですか?

于 2012-05-24T14:08:34.480 に答える
0

行番号に少し混乱がある可能性があり、オブジェクト viewFlipper が ViewFlipper viewFlipper として定義されている可能性があると推測しています。

于 2012-05-24T13:44:59.577 に答える