Android ADT:扩展android.widget.EditText - 运行时类强制转换异常

时间:2012-07-16 13:25:09

标签: android

我有一个简单的应用程序,它将有一堆EditTexts取数值,以及它们之间的各种计算。就像单位转换工具一样。

所以我已经将CalcField定义为EditText的子类,用作仅包含浮点值的字段,以及一些额外的方法,例如:

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)

有谁能告诉我为什么我不能做这个简单的类型转换?

提前致谢

1 个答案:

答案 0 :(得分: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" />