我正在尝试在选择菜单上的项目后更改选项菜单。 这就是我试过的:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(refresh) {
menu.clear();
menu.add(0, Menu.FIRST, 0, "Changed item");
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.refresh)
{
refresh = true;
closeOptionsMenu();
invalidateOptionsMenu();
openOptionsMenu();
}
return super.onOptionsItemSelected(item);
}
但我明白了:
W/InputManagerService(192): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4147c778
并且代码无效.. 有什么想法吗?
答案 0 :(得分:1)
菜单将关闭而不会重新打开,只有当我在菜单按钮上单击时才会看到新值
我不知道在选择项目后仍然打开选项菜单,但是你可以使用Handler和Runnable自动重新打开它。
创建一些新的字段变量:
private Handler handler = new Handler();
private Runnable reopenMenu = new Runnable() {
@Override
public void run() {
openOptionsMenu();
}
};
在onOptionsItemSelected()
内使用:
if(item.getItemId() == R.id.refresh)
{
refresh = true;
invalidateOptionsMenu(); // This is only necessary for changing an ActionBar
handler.postDelayed(reopenMenu, 100);
}
(注意我删除了关闭和打开菜单的电话。)
最后,您应该在refresh = false;
中设置onPrepareOptionsMenu()
,因为您只需要进行一次更改。
答案 1 :(得分:0)
可能更容易在菜单上设置第二个按钮,但可见性设置为GONE,然后在需要时将其显示。
MenuItem = menu.findItem(R.id.menuItem);
MenuItem.setVisible(false);