当其他菜单项被点击时,如何在操作栏中获取菜单项的ID

3

我有一个动作栏上的菜单项。在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


1
为什么在switch语句中像R.id.todaySched:{}这样的地方要加上大括号{}? - Shobhit Puri
@mohit,我刚刚在我的问题中提供了我的LogCat。 - Adyana Permatasari
MainActivity上的第211行是什么? - Mohit
@mohit infoLog=(MenuItem)findViewById(R.id.infoLog);@mohit infoLog=(MenuItem)findViewById(R.id.infoLog); - Adyana Permatasari
日志链接丢失。 - JPM
2个回答

7
根据您的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;
    }

}

已经确认并且正常工作。现在按照您的需求使用它即可。

祝贺你...


你能把你的导入也发一下吗? - Mohit
我的导入: import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; - Adyana Permatasari
你之前有问过这个问题吗?http://stackoverflow.com/questions/18292126/change-android-action-bar-menu-items-icon-on-click - Mohit
改变另一项是什么意思?请具体说明。 - Mohit
我有2个菜单项,当我点击“a”项时,我希望“a”项的图标改变,并且“b”项的图标也改变。 - Adyana Permatasari
显示剩余2条评论

4
每次您想对操作栏中的项目进行更改时,都必须调用函数invalidateOptionsMenu()。然后,您要重写方法public boolean onPrepareOptionsMenu(Menu menu),在那里获取您的菜单项并设置图标、创建新操作或删除它们。希望这可以帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接