我可能会误解类型转换,但这是我的问题。
我有一个带有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>
然后在我的活动中,我声明了一个ToggleButton变量:
private ToggleButton mRecordButton = null;
现在,我实现了一个名为RecordButton的ToggleButton的子类:
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
。
为什么呢?如何将它从RecordButton
(超类)转换为ToggleButton
(子类)?
答案 0 :(得分:5)
,将常规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" />
...
答案 1 :(得分: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>
带有android SDK的Eclipse可以自动确定你的观点: