Два флажка. При выборе одного — снять флажок с другого
В main_menu.xml есть два CheckBox:
<item
android:id="@+id/action_menu1"
android:orderInCategory="6"
android:title="Действие_1">
<menu>
<item android:checkable="true" android:id="@+id/menu1_open"
android:title="Открыть" />
<item android:checkable="true" android:id="@+id/menu1_close"
android:title="Закрыть" />
</menu>
</item>
В MainActivity.java следующий код:
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.menu1_open:
item.setChecked(item.isChecked() ? false : true);
CheckBox ch = findViewById(R.id.menu1_close);
ch.setChecked(false);
break;
}
return super.onOptionsItemSelected(item);
}
И мне нужно переключать эти флажки, т.е если выбрал menu1_open, то menu1_close стал false и наоборот.
Но это строка CheckBox ch = findViewById(R.id.menu1_close); возвращает ошибку:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setChecked(boolean)' on a null object reference
И я не могу понять, почему так? Ведь menu1_close существует!
Подскажите, пожалуйста, в чем дело?
p.s мне нужно использовать именно CheckBox (задание такое) и я совсем "зеленый" в java.
Ответы (1 шт):
Ошибку возвращает эта строка ch.setChecked(false);, потому что ch не найден и имеет значение null.
Для ссылок на элементы меню вместо
CheckBox ch = findViewById(R.id.menu1_close);
которое ищет вью в лейауте активити/фрагмента следует использовать:
MenuItem ch = menu.findItem(R.id.menu1_close);
Поскольку элемент меню - не чекбокс и не его наследник, его нельзя к нему привести в инициализации переменной, но он также может быть checkable и принимать состояние checked.
Если нужно использовать именно класс CheckBox, то стоит это делать не в меню, а в обычном активити/фрагменте.