所以我试图获取我的菜单项,即在操作栏上显示的行为就像一个可检查的菜单选项。第一部分工作,这意味着它是可检查的,当我按下它,并在代码中设置setChecked(true)它的工作原理。但是什么不起作用的是视觉部分。在已检查和未选中状态下,菜单项在操作栏上的显示方式没有变化?我尝试使用invalidateOptionsMenu(),但这不能完成这项工作,不仅如此,我的代码中的那行我无法退出检查状态?!? 发生的事情是,使OptionsMenu()接缝无效以取消设置已检查状态并最终“循环”,或者在每次按下该菜单项时,我会继续检查代码中未经检查的部分,并且无效,它将被取消选中我想......
以下是我的XML文件中的代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/lenslist_menu_add"
android:showAsAction="always"
android:title="@string/add"/>
<item android:id="@+id/lenslist_menu_delete"
android:showAsAction="always"
android:checkable="true"
android:title="@string/delete"/>
</menu>
这是java代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.lenslist_menu_add:
return true;
case R.id.lenslist_menu_delete:
if (item.isChecked() == true) {
item.setChecked(false);
deleteMode = false;
lensAdapter.setDeleteMode(false);
} else {
item.setChecked(true);
deleteMode = true;
lensAdapter.setDeleteMode(true);
}
lensAdapter.notifyDataSetChanged();
return true;
}
return super.onOptionsItemSelected(item);
}
谢谢!
答案 0 :(得分:32)
可检查项目仅出现在子菜单或上下文菜单中。
您正在使用它们作为主菜单项,因此无法使用。
消息来源:下载API DEMOS,打开文件ApiDemos / res / menu / checkable.xml,你会在第13行看到它。我不知道他们为什么不要在开发者文档
中提到这一点答案 1 :(得分:8)
或者自己动手
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.item1).setIcon(menu_checked?R.drawable.menu_ico_checked:R.drawable.menu_ico_unchecked);
return super.onPrepareOptionsMenu(menu);
}
并在onOptionsItemSelected中执行:
....
menu_checked=!menu_checked;
invalidateOptionsMenu();
答案 2 :(得分:4)
最佳解决方案是将actionLayout
的{{1}}设置为<Item>
。此解决方案为您提供了一个原生的复选框(带有素材动画等),其字体与其他项目相匹配,它既可以作为动作也可以在子菜单中使用。
CheckBox
的新布局:action_checkbox.html
<?xml version="1.0" encoding="utf-8"?>
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:checked="false"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Menu"
android:id="@+id/action_item_checkbox"
/>
。请注意,您需要<Item>
和Checkable
,以防它显示在子菜单中(在这种情况下,Checked
会被忽略。actionLayout
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/menu_action_logging"
android:title="@string/action_logging"
android:orderInCategory="100"
android:showAsAction="always"
android:checkable="true"
android:checked="false"
android:actionLayout="@layout/action_checkbox"
/>
</menu>
。RetainedFragment