在项目选择上更改选项菜单的项目

时间:2012-11-27 17:29:04

标签: android refresh optionmenu

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

@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

并且代码无效.. 有什么想法吗?

2 个答案:

答案 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);