0

数値を取得する一連の EditTexts と、それらの間のさまざまな計算を行う単純なアプリがあります。単位変換ツールのようなもの。

そのため、CalcField を EditText のサブクラスとして定義し、float 値のみを含むフィールドとして機能させます。いくつかの追加メソッドを使用します。次に例を示します。

package com.example.ex1;
import android.content.Context;
import android.widget.*;
public class CalcField extends EditText {

// no idea why this is needed.  without it i'm told an explicit constructor needed.
public CalcField(Context c) {
    super(c);
}

public void setValue(float d) {
    setText(String.valueOf(d));
}
public float getValue() {
    return Float.valueOf(getText().toString());
}
}

==

私のレイアウトでは、次のように定義されたフィールド X があります。

        <EditText
            android:id="@+id/X"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="numberDecimal" />

そして、私の主な活動では、次のように、レイアウトからこのフィールドを取得しようとします:

    CalcField fieldX = (CalcField) findViewById(R.id.X);

私が理解していないクラスキャスト例外を与える:

07-16 21:23:49.049: E/AndroidRuntime(1429): FATAL EXCEPTION: main
07-16 21:23:49.049: E/AndroidRuntime(1429): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ex1/com.example.ex1.MainActivity}: java.lang.ClassCastException: android.widget.EditText cannot be cast to com.example.ex1.CalcField
07-16 21:23:49.049: E/AndroidRuntime(1429):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)

この単純な型キャストを実行できない理由を誰か教えてもらえますか?

前もって感謝します

4

1 に答える 1

4

これを変える

       <EditText
        android:id="@+id/X"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal" />

        <com.example.ex1.CalcField
        android:id="@+id/X"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal" />
于 2012-07-16T13:27:21.787 に答える