android - 将ToggleButton转换为子类

goz*_*lli 1 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>
Run Code Online (Sandbox Code Playgroud)

然后在我的活动中我声明了一个ToggleButton变量:

private ToggleButton mRecordButton = null;
Run Code Online (Sandbox Code Playgroud)

现在,我实现了一个名为RecordButton的ToggleButton子类:

class RecordButton extends ToggleButton {

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

    public RecordButton(Context ctx) {
        super(ctx);
        setOnCheckedChangeListener(clicker);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后在onCreate我的ID中找到按钮:

mRecordButton = (RecordButton) findViewById(R.id.btnRec);
Run Code Online (Sandbox Code Playgroud)

这引发了一个ClassCastException.

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

Ner*_*een 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" />
...
Run Code Online (Sandbox Code Playgroud)