android - 单击其他菜单项时如何在操作栏上获取菜单项 ID

标签 android android-actionbar menuitem android-2.3-gingerbread

所以我在操作栏上有菜单项。在 onOptionsItemSelected 上,我想更改菜单项图像。

这是我的代码

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
    case R.id.todaySched:{
        viewTodaySched();
        item.setIcon(R.drawable.calendarselected);
        infoLog=(MenuItem)findViewById(R.id.infoLog);
        infoLog.setIcon(R.drawable.book);

        return true;}
    case R.id.infoLog:{
        viewInfoLog();
        item.setIcon(R.drawable.bookselected);
                    todaySched=(MenuItem)findViewById(R.id.todaySched);
        todaySched.setIcon(R.drawable.calenderselected);
        return true;}
    default:
        return super.onOptionsItemSelected(item);
    }
}

但是当我点击它时图标不会改变,而且我得到了运行时错误。 例如:当我点击 todaySched 图标时,似乎无法获取 infoLog 项目 ID。

我的 LogCat:LogCat

最佳答案

根据您的 logcat,您得到了类转换异常,并且您使用了 sharlockactionbar。 所以请尝试检查您是否导入了正确的 MenuItem 和 Menu,它们应该是这样的:

import com.actionbarsherlock.view.MenuItem;
and
import com.actionbarsherlock.view.Menu; 

代替

import android.view.MenuItem;
and
import android.view.Menu;

编辑:

以下是您只需单击一下即可更改两个图标的方法:

  private Menu menu;
private MenuItem item1, item2;
Boolean original = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getSupportMenuInflater().inflate(R.menu.menu, menu);

    this.menu = menu;
    return true;

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.todaySched) {
        update();

    } else if (id == R.id.infoLog) {

        update();
    }

    return true;

}

private void update() {

    item1 = menu.findItem(R.id.todaySched);
    item2 = menu.findItem(R.id.infoLog);

    if (original) {
        item1.setIcon(getResources().getDrawable(
                android.R.drawable.ic_menu_search));
        item2.setIcon(getResources().getDrawable(
                android.R.drawable.ic_menu_report_image));
        original = false;
    } else if (!original) {

        item1.setIcon(getResources().getDrawable(
                android.R.drawable.ic_menu_my_calendar));
        item2.setIcon(getResources().getDrawable(
                android.R.drawable.ic_menu_info_details));
        original = true;
    }

}

已检查并正在运行。现在根据您的要求使用它..

干杯....

关于android - 单击其他菜单项时如何在操作栏上获取菜单项 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18297542/

相关文章:

Android系统图标半透明

c++ - Win32 API C++,未使用 WM_COMMAND 接收到标识符

android - 实现曲线动画的问题

java - 如何配置后退切换按钮?

android - 在对话框android中按关闭按钮时出错

Android actionBar OnClick()

menu - Android支持:design NavigationView checked menu sub items

css - 子菜单项未在完整浏览器中显示 (CSS)

java - 对我来说,orthoM 与 frustumM 做同样的事情(即显示透视)

java - 尝试在 LongClick 上编辑 TextView 的值——几乎可以工作