我正在尝试动态设置菜单的标题。
检索并设置它:
ItemView menuTitle = ((ItemView) findViewById(R.id.menu_filter));
menuTitle.setTitle("TITLE_HERE");
只要它在onOptionsItemSelected(MenuItem item)
方法中就可以正常工作。
我无法找到从onPrepareOptionsMenu
或onCreateOptionsMenu
方法设置此方法的方法,因为findViewById
返回null(即使在菜单膨胀之后)。
奇怪的是,文档中似乎没有任何内容可以实现这一点,并且谷歌搜索对于这样一个看似简单的问题并没有太大的帮助。
答案 0 :(得分:5)
我建议将活动中的引用保存到您在onCreateOptionsMenu
中收到的Menu对象,然后使用它来检索需要在需要时进行更改的MenuItem
。例如,您可以执行以下操作:
public class YourActivity extends Activity {
private Menu menu;
private String inMenuTitle = "Set to In";
private String outMenuTitle = "Set to Out";
private boolean flag = false;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// Create your menu...
this.menu = menu;
return true;
}
private void updateMenuTitles() {
MenuItem menuItem = menu.findItem(R.id.bedSwitch);
if (flag) {
menuItem .setTitle(outMenuTitle);
} else {
menuItem .setTitle(inMenuTitle);
}
}
}
或者,您可以覆盖onPrepareOptionsMenu
以在每次显示菜单时更新菜单项。
答案 1 :(得分:4)
我必须刚刚发现并且没有意识到有一个名为findItem的函数...
menu.findItem(R.id.MENU_TITLE).setTitle("MY TITLE");
答案 2 :(得分:1)
要动态设置菜单标题,您可以在onCreateOptionsMenu中执行此操作:
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(Menu.NONE, MyActivity.MENU_ID, 0, "Your Title").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
return (true);
}
随着条件的变化(即标题需要更改),请致电
invalidateOptionsMenu();
在你的活动上,它将调用onCreateOptionsMenu并设置新标题。
答案 3 :(得分:1)
只需使用:
getSupportActionBar().setTitle("YOUR TITLE HERE");
在创建时内部,在初始化ui或视图绑定或数据绑定之后。
答案 4 :(得分:0)
我正在从onPrepareOptionMenu
更改菜单标题,类似于以下代码。这是我片段中的代码,我认为这也应该适用于该活动。
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_profile, menu)
super.onCreateOptionsMenu(menu, inflater)
}
override fun onPrepareOptionsMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu)
if (count == 1) {
menu.findItem(R.id.screen_count).title = "1/3"
} else {
menu.findItem(R.id.screen_count).title = "xyz/3"
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.ic_edit -> {
// handle click event here
}
}
return super.onOptionsItemSelected(item)
}