Android操作栏可检查菜单项无法正常工作/显示?

Dus*_*sko 14 android menu android-actionbar

所以我试图获取我的菜单项,即在操作栏上显示的行为就像一个可检查的菜单选项.第一部分工作,这意味着它是可检查的,当我按下它,并在代码中设置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>
Run Code Online (Sandbox Code Playgroud)

这是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);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ent*_*eco 32

可检查项目仅出现在子菜单或上下文菜单中.

您正在使用它们作为主菜单项,因此它将无法正常工作.

消息来源:下载API DEMOS,打开文件ApiDemos/res/menu/checkable.xml,你会在第13行看到它.我不知道为什么他们在开发者文档中没有提到这一点

参考评论:http: //alvinalexander.com/java/jwarehouse/android-examples/platforms/android-2/samples/ApiDemos/res/menu/checkable.xml.shtml


djd*_*nce 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);
}
Run Code Online (Sandbox Code Playgroud)

并在onOptionsItemSelected中执行:

 ....
 menu_checked=!menu_checked;
 invalidateOptionsMenu();
Run Code Online (Sandbox Code Playgroud)