0

选择菜单上的项目后,我正在尝试更改选项菜单。这是我尝试过的:

@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

并且代码不起作用..有什么想法吗?

4

2 回答 2

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()因为你只需要进行一次更改。

于 2012-11-27T18:35:55.927 回答
0

将第二个按钮已经在菜单上但将可见性设置为 GONE 可能会更容易,然后在需要时使其可见。

MenuItem = menu.findItem(R.id.menuItem);

MenuItem.setVisible(false);
于 2012-11-27T17:30:44.397 回答