android - 将ToggleButton转换为子类

时间:2012-11-27 10:42:30

标签: java android casting

我可能会误解类型转换,但这是我的问题。

我有一个带有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(子类)?

2 个答案:

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

答案 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可以自动确定你的观点:

相关问题