我试图从onOptionsItemSelected(MenuItem项目)方法之外更改菜单项的标题。
我已经做了以下工作;
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;
}
但是,我希望能够修改这个方法之外的特定菜单项的标题。
声明你的菜单字段。
private Menu menu;
下面是onCreateOptionsMenu()方法
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
try {
getMenuInflater().inflate(R.menu.menu_main,menu);
} catch (Exception e) {
e.printStackTrace();
Log.i(TAG, "onCreateOptionsMenu: error: "+e.getMessage());
}
return super.onCreateOptionsMenu(menu);
}
下面将是您的名称setter活动。要么通过单击按钮,要么通过条件代码
public void setMenuName(){
menu.findItem(R.id.menuItemId).setTitle(/*Set your desired menu title here*/);
}
这对我很管用。
我需要更改片段的菜单图标。我把查尔斯对这个问题的回答做了一点修改,以获取片段:
private Menu top_menu;
//...
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
//...
rootview = inflater.inflate(R.layout.first_content,null);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
this.top_menu = menu;
}
// my procedure
private void updateIconMenu() {
if(top_menu!= null) {
MenuItem nav_undo = top_menu.findItem(R.id.action_undo);
nav_undo.setIcon( R.drawable.back);
}
}
你可以创建一个全局的“Menu”对象,然后在onCreateOptionMenu中分配它
public class ExampleActivity extends AppCompatActivity
Menu menu;
然后在这里赋值
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
this.menu = menu;
return true;
}
然后使用赋值的Menu对象获取所需的项
menu.findItem(R.id.bedSwitch).setTitle("Your Text");