Android 如何在两个菜单图标之间切换

Android 如何在两个菜单图标之间切换,android,menuitem,Android,Menuitem,我的工具栏上有膨胀的菜单项。单击一个菜单项图标时,我想用另一个图标切换该图标,反之亦然。我这样做是为了在listview和gridview之间切换 我尝试的是使用不同的menu.xml重新创建菜单。但是当我从onOptionsItemSelected(MenuItem){}调用onCreateOptions菜单(菜单)时,应用程序崩溃 @覆盖 公共布尔值onOptionsItemSelected(菜单项项){ int id=item.getItemId(); if(id==R.id.actio

我的
工具栏上有膨胀的
菜单
。单击一个
菜单
项图标时,我想用另一个图标切换该图标,反之亦然。我这样做是为了在
listview
gridview
之间切换

我尝试的是使用不同的
menu.xml
重新创建菜单。但是当我从
onOptionsItemSelected(MenuItem){}
调用
onCreateOptions菜单(菜单)
时,应用程序崩溃

@覆盖
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
if(id==R.id.action\u网格){
setVisibility(View.INVISIBLE);
gv.setVisibility(视图可见);
//我再次尝试重新创建菜单
OnCreateOptions菜单(菜单)
}
if(id==R.id.action\u列表){
setVisibility(View.VISIBLE);
gv.setVisibility(视图不可见);
//我再次尝试重新创建菜单
OnCreateOptions菜单(菜单)
}
返回super.onOptionsItemSelected(项目);

}
不要尝试重新创建菜单,只需更改图标并使用布尔标志保持状态:

boolean flag = true;

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_grid_list_toggle) {
        if (boolean) {
            // Show grid view
            item.setIcon(R.drawable.ic_grid);
            listView.setVisibility(View.INVISIBLE);
            gv.setVisibility(View.VISIBLE);
        } else {
            // Show list view
            item.setIcon(R.drawable.ic_list);
            listView.setVisibility(View.VISIBLE);
            gv.setVisibility(View.INVISIBLE);
        }
        flag = !flag; // toggle value on every click
    }
    return super.onOptionsItemSelected(item);
}

您不需要每次都重新创建菜单,只需处理
MenuItems

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    String title = item.getTitle().toString();
    switch (title) {
        case TITLE_GRIDVIEW:
            item.setTitle(TITLE_LISTVIEW);
            item.setIcon(R.drawable.listview_icon);
            //switch to gridview
            return true;
        case TITLE_LISTVIEW:
            item.setTitle(TITLE_GRIDVIEW);
            item.setIcon(R.drawable.gridview_icon);
            //switch to listview
            return true;
    }
    return false;
}

它基于项目的绑定标题工作,这样,您只需要菜单中的一个项目在listview和gridview之间切换,这些项目就像一个切换按钮。

我正在我的一个项目中执行这种类型的操作。见上面我的答案。它非常简单,可以解决任何问题。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    String title = item.getTitle().toString();
    switch (title) {
        case TITLE_GRIDVIEW:
            item.setTitle(TITLE_LISTVIEW);
            item.setIcon(R.drawable.listview_icon);
            //switch to gridview
            return true;
        case TITLE_LISTVIEW:
            item.setTitle(TITLE_GRIDVIEW);
            item.setIcon(R.drawable.gridview_icon);
            //switch to listview
            return true;
    }
    return false;
}