Подтвердить что ты не робот

Установите пункт меню, отмеченный как код

У меня есть приложение Android со следующим пунктом меню в одной из Деяний (что касается обработки списка имен и номеров в макете):

<item android:id="@+id/menu_sort_tagg"
      android:icon="@android:drawable/ic_menu_sort_by_size"
      android:title="@string/menu_sort_list" >
      <menu> 
        <group android:checkableBehavior="single">
            <item android:id="@+id/sort_by_name"
                  android:title="@string/sort_by_name" />
            <item android:id="@+id/sort_by_mac"
                          android:title="@string/sort_by_mac" />

     </menu>
</item>

и по мере изменения состояния приложения, я хочу иметь возможность предварительно проверить, какой элемент в списке опций сортировки был использован в последний раз со следующим кодом:

((MenuItem)findViewById(R.id.sort_by_name)).setChecked(true);

Проблема в том, что эта конкретная строка дает мне исключение во время выполнения. Кто-нибудь знает, почему?

Взгляд на журнал показывает, что исключения во время выполнения запускаются с помощью исключения нулевого указателя. Изменяя код таким образом:

MenuItem mi = (MenuItem)findViewById(R.id.sort_by_name);
mi.setChecked(true);

становится ясно, что исключение возникает в инструкции секунд, т.е. MenuItem mi имеет значение null. Итак, почему не удается выполнить первый оператор для ввода указателя на правильный MenuItem?

4b9b3361

Ответ 1

Вы не можете сделать findViewById() для меню, потому что это меню, а не вид. И вы можете изменить состояние меню при его создании или подготовке. Например, если вы создаете меню опций, вы можете сделать это в методе Activity: onPrepareOptionsMenu():

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    menu.findItem(R.id.sort_by_name).setChecked(true);
    //Also you can do this for sub menu
    menu.getItem(firstItemIndex).getSubMenu().getItem(subItemIndex).setChecked(true);
    return true;
}