#java #android #checkbox #menu #popupmenu
#java #Android #флажок #меню #popupmenu
Вопрос:
У меня есть файл ресурсов меню, подобный этому :
<menu xmlns:android="http://schemas.android.com/apk/res/android"
>
<group android:checkableBehavior="single">
<item android:id="@ id/sort_all"
android:title="All"
android:orderInCategory="1" />
<item android:id="@ id/sort_co"
android:title="CoAuthors"
android:orderInCategory="2" />
<item
android:id="@ id/sort_title"
android:title="Title"
android:orderInCategory="3" />
<item
android:id="@ id/sort_journal"
android:title="Journals"
android:orderInCategory="4" />
<item
android:id="@ id/sort_year"
android:title="Year"
android:orderInCategory="5" />
</group>
</menu>
и я использую его во всплывающем меню :
final PopupMenu popup = new PopupMenu(MainActivity.this, btn1);
//Inflating the Popup using xml file
popup.getMenuInflater().inflate(R.menu.search_menu, popup.getMenu());
//registering popup with OnMenuItemClickListener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.sort_co:
popup.getMenu().findItem(item.getItemId()).setChecked(true);
return true;
case R.id.sort_title:
item.setChecked(true);
return true;
case R.id.sort_journal:
item.setChecked(true);
return true;
case R.id.sort_year:
item.setChecked(true);
return true;
case R.id.sort_all:
item.setChecked(true);
return true;
default:
return true;
}
}
});
popup.show();
}
});
как вы можете видеть, я пытался использовать
item.setChecked(true)
и
popup.getMenu().findItem(item.getItemId()).setChecked(true);
но проблема в том, что когда я нажимаю на элементы непосредственно перед закрытием меню, элемент проверяется, но когда я снова открываю меню, он не проверяется!
Я также пробовал использовать
MenuItem subMenuItem = item.getSubMenu().getItem(INDEX_OF_ITEM);
subMenuItem.setChecked(!subMenuItem.isChecked());
но это дает мне исключение NullPointerException … .
Комментарии:
1. Исключение NullPointerException обычно означает, что вы пытаетесь сослаться на объект, который не инициализирован.
2. @Danieboy Чувак, я знаю, что такое исключение NullPointerException, я прошу ответа, для всего всплывающего меню…
Ответ №1:
Вы можете попробовать эту модификацию в своем коде. Вот так:
final PopupMenu popup = new PopupMenu(MainActivity.this, btn1);
//Inflating the Popup using xml file
popup.getMenuInflater().inflate(R.menu.search_menu, popup.getMenu());
int item_selected = 1;
if(item_selected == 1){
popup.getMenu().findItem(R.id.sort_co).setChecked(true);
}else if(item_selected == 2) {
popup.getMenu().findItem(R.id.sort_title).setChecked(true);
}
//registering popup with OnMenuItemClickListener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.sort_co:
item.setChecked(true);
item_selected = 1;
return true;
case R.id.sort_title:
item.setChecked(true);
item_selected = 2;
return true;
default:
return true;
}
}
});
popup.show();