Gar*_*bit 202 java android menu menuitem
我正在尝试从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;
}
Run Code Online (Sandbox Code Playgroud)
但是我希望能够修改此方法之外的特定菜单项的标题.
Cha*_*ley 370
我建议在活动中保留你在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以覆盖onPrepareOptionsMenu以在每次显示菜单时更新菜单项.
Tod*_*and 109
正如JxDarkAngel建议的那样,从你的Activity中的任何地方调用它,
invalidateOptionsMenu();
Run Code Online (Sandbox Code Playgroud)
然后覆盖:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
int savedRoute = mPrefs.getInt(getString(R.string.saved_route), 0);
if (savedRoute > 0) {
menu.findItem(R.id.action_route).setTitle("Route " + savedRoute);
}
return super.onPrepareOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
是一个更好的选择.我使用了/sf/answers/1224755241/的答案
你可以这样做创建一个全局的"菜单"对象,然后在onCreateOptionMenu中分配它
public class ExampleActivity extends AppCompatActivity
Menu menu;
Run Code Online (Sandbox Code Playgroud)
然后分配到这里
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
this.menu = menu;
return true;
}
Run Code Online (Sandbox Code Playgroud)
然后使用指定的Menu对象获取所需的项目
menu.findItem(R.id.bedSwitch).setTitle("Your Text");
Run Code Online (Sandbox Code Playgroud)
创建一个setOptionsTitle()方法并在类中设置一个字段.如:
String bedStatus = "Set to 'Out of Bed'";
Run Code Online (Sandbox Code Playgroud)
...
public void setOptionsTitle(String status)
{
bedStatus = status;
}
Run Code Online (Sandbox Code Playgroud)
现在,当填充菜单时,将标题更改为您的状态:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(bedStatus);
// Return true so that the menu gets displayed.
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
197801 次 |
| 最近记录: |