如何在Android中动态更改菜单项文本
我正在尝试从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
中的任何地方调用它,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(在需要时以及需要时)。例如,你可以按照以下方式进行操作: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
来在每次显示菜单时更新菜单项。