1

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

我有一个带有 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;

现在,我实现了一个 ToggleButton 的子类,称为 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.

为什么?如何将它RecordButtonToggleButton(超类)转换为(子类)?

4

2 回答 2

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" />
...

于 2012-11-27T10:44:37.100 回答
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 可以自动确定您的视图:

于 2012-11-27T10:47:17.913 回答