0

次の簡単なコード行を取得しました。

主な活動:

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
(...)
   public void VehicleDeleteModus(View v){
    boolean on = ((ToggleButton) v).isChecked();
   (...)
   }
}

XML:

<Switch
    android:id="@+id/switch1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="VehicleDeleteModus"
    android:paddingLeft="12dp"
    android:text="Delete-Modus"
    android:textColor="#ffffff" />

ソース: http://developer.android.com/guide/topics/ui/controls/togglebutton.html

アプリはエラーなしでコンパイルされ、Galaxy Nexus にインストールされます。ただし、スイッチ(オン/オフスライダー)を押した直後にこの例外が発生します。

android.widget.switch は android.widget.togglebutton にキャストできません

助言がありますか?

4

2 に答える 2

1

SwitchToggleButtonはですがCompoundButtonSwitchは ではありませんToggleButton。それぞれを交互に使用することはできません。

         CompoundButton
                |
    +-----------+----------+
    |                      |
 Switch               ToggleButton

代わりに、キャストを(CompoundButton)(一般的な場合) または(Switch)(特定の、より良い) に変更してみてください。

public void VehicleDeleteModus(View v){
    boolean on = ((Switch) v).isChecked();
    (...)
}
于 2014-05-15T02:15:31.507 に答える
0

なぜトグルボタンにキャストしたいのですか? スイッチオブジェクトを使い続けるだけです。ボタンのクリックの場合と同じように、イベント リスナーを実装するだけで済みます。次に、ブール値パラメーターからチェック済みのステータスを取得します。

switch1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    //get boolean value from parameter.

    boolean on = isChecked;
    }
});
于 2014-05-15T02:11:03.677 に答える