2012-11-27 69 views
1

我可能會誤解類型轉換,但這是我的問題。android - 將ToggleButton轉換爲子類

我有一個Android設備上查看與切換按鈕:

<LinearLayout 
    ... > 
    <ToggleButton 
     android:id="@+id/btnRec" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:textOff="Start TEST" 
     android:textOn="Stop TEST" /> 
    ... 
</LinearLayout> 

然後在我的活動我宣佈一個切換按鈕變量:

private ToggleButton mRecordButton = null; 

現在,我實現了切換按鈕的子類,稱爲RecordButton :

class RecordButton extends ToggleButton { 

    OnCheckedChangeListener clicker = new OnCheckedChangeListener() { 
     ... 
    }; 

    public RecordButton(Context ctx) { 
     super(ctx); 
     setOnCheckedChangeListener(clicker); 
    } 
} 

最後在onCreate我找到按鈕通過它的ID:

mRecordButton = (RecordButton) findViewById(R.id.btnRec); 

這將拋出ClassCastException

爲什麼?我怎樣才能將它從ToggleButton(超類)投射到RecordButton(子類)?

+0

爲什麼?因爲在XML中你聲明瞭一個ToggleButton,它不是一個RecordButton。嘗試聲明一個RecordButton。 – njzk2

回答

5

在你的XML,取代常規ToogleButton與自定義的..

<LinearLayout 
... > 
<package.class.RecordButton 
    android:id="@+id/btnRec" 
    android:layout_width="125dp" 
    android:layout_height="wrap_content" 
    android:textOff="Start TEST" 
    android:textOn="Stop TEST" /> 
... 

2

你可以使用你的看法佈局:

<LinearLayout 
    ... > 
    <com.project.RecordButton 
     android:id="@+id/btnRec" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:textOff="Start TEST" 
     android:textOn="Stop TEST" /> 
    ... 
</LinearLayout> 

與Eclipse的Android SDK中可以自動地確定你的看法: