我正在尝试从onOptionsItemSelected(MenuItem item)方法外部更改菜单项的标题。
onOptionsItemSelected(MenuItem item)
我已经做了以下工作;
public boolean onOptionsItemSelected(MenuItem item) { try { switch(item.getItemId()) { case R.id.bedSwitch: if(item.getTitle().equals("Set to 'In bed'")) { item.setTitle("Set to 'Out of bed'"); inBed = false; } else { item.setTitle("Set to 'In bed'"); inBed = true; } break; } } catch(Exception e) { Log.i("Sleep Recorder", e.toString()); } return true; }
但是,我希望能够在此方法之外修改特定菜单项的标题。
正如JxDarkAngel所建议的那样,可以从你的Activity中的任何地方调用它,
Activity
invalidateOptionsMenu();
然后覆盖:
@Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(R.id.bedSwitch); if (item.getTitle().equals("Set to 'In bed'")) { item.setTitle("Set to 'Out of bed'"); inBed = false; } else { item.setTitle("Set to 'In bed'"); inBed = true; } return super.onPrepareOptionsMenu(menu); }
我建议在活动中保留对你在onCreateOptionsMenu中收到的Menu对象的引用,然后使用该引用来检索需要更改的MenuItem(在需要时以及需要时)。例如,你可以按照以下方式进行操作:
onCreateOptionsMenu
public class YourActivity extends Activity { private Menu menu; private String inBedMenuTitle = "Set to 'In bed'"; private String outOfBedMenuTitle = "Set to 'Out of bed'"; private boolean inBed = false; @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Create your menu... this.menu = menu; return true; } private void updateMenuTitles() { MenuItem bedMenuItem = menu.findItem(R.id.bedSwitch); if (inBed) { bedMenuItem.setTitle(outOfBedMenuTitle); } else { bedMenuItem.setTitle(inBedMenuTitle); } } }
或者,你可以覆盖onPrepareOptionsMenu来在每次显示菜单时更新菜单项。
onPrepareOptionsMenu