2012-07-16 77 views
0

我有一個簡單的應用程序,它將有一堆EditTexts取數值,並在它們之間進行各種計算。就像一個單位轉換工具。Android ADT:擴展android.widget.EditText - 運行時類拋出異常

所以我定義爲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) 

誰能告訴我爲什麼我不能做這個簡單的類型轉換?

在此先感謝

回答

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" /> 
+1

對了,補充添加構造函數(上下文,AttributeSet中),我想。 – AMerle 2012-07-16 13:30:45

+0

非常感謝,我會盡力。任何建議的最佳地點/方式瞭解這個東西? – user1526826 2012-07-17 12:07:13