android.widget.Switch не может быть приведен к android.widget.ToggleButton

Я получил эти простые строки кода:

Основная деятельность:

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

Какие-либо предложения?

2 ответа

Даже если Switch а также ToggleButton являются CompoundButton, Switch это не ToggleButton, Каждый не может быть использован взаимозаменяемо.

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

Попробуйте изменить кастинг на (CompoundButton) (для общего случая) или (Switch) (конкретнее, лучше).

public void VehicleDeleteModus(View v){
    boolean on = ((Switch) v).isChecked();
    (...)
}

Почему вы хотите привести к кнопке переключения? Просто продолжайте использовать объект переключения. Вам просто нужно реализовать прослушиватель событий, как если бы вы нажали кнопку. Затем получите проверенный статус из логического параметра.

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

    boolean on = isChecked;
    }
});
Другие вопросы по тегам