Как добавить переключатель слушателя в панели действий Android?

Я пытаюсь добавить слушателя к своему переключателю на панели действий, потому что я прочитал много ответов об этом в Stackru, но мое приложение падает ниже указанного уровня.

мое главное меню xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
    android:id="@+id/myswitch"
    android:title=""
    app:showAsAction="always"
    app:actionLayout="@layout/switch_layout"/>
</menu>

мой переключатель раскладки

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<android.support.v7.widget.SwitchCompat
    android:id="@+id/switchForActionBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="" />
</RelativeLayout>

Мой на меню параметров создания это

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.mainmenu, menu);
    for (int i = 0; i < menu.size(); i++) {
        MenuItem item = menu.getItem(i);
        if (item.getItemId() == R.id.myswitch) {
            View view = MenuItemCompat.getActionView(item);
            if (view != null) {
                 **Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar);**
              //to do add a listener for this switch
            }
        }
    }

    return true;
}

При постоянной отладке я обнаружил, что Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar); эта строка приводит к сбою приложения. Я надеюсь, что моя проблема теперь ясна. Я хочу подключить слушателя к переключателю на панели действий, но не могу получить экземпляр объекта этого переключателя. Выше показано, как было направлено большинство ответов на Stackru. Любая помощь по этому вопросу будет принята с благодарностью.

Спасибо

1 ответ

Решение
Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar);

Должно быть

SwitchCompat mainSwitchOnOffSw = (SwitchCompat) view.findViewById(R.id.switchForActionBar);

как вы используете SwitchCompat в макете.

Другие вопросы по тегам