0

我有一个包含两个选项的菜单,我只希望当我选择一个 MenuItem 时,它会被禁用,而另一个 MenuItem 会启用。我做了一个调用 invalidateOptionsMenu() 的 onOptionsItemSelected(),只是为了进行这些更改。

我的 onPrepareOptionsMenu():

@Override
public boolean onPrepareOptionsMenu(Menu menu){
    super.onPrepareOptionsMenu(menu);

    MenuItem onePlayer = menu.findItem(R.id.Settings_OnePlayer);
    MenuItem twoPlayer = menu.findItem(R.id.Settings_TwoPlayer);

    System.out.println("onePlayer " + onePlayer.isEnabled() + " twoPlayer " + twoPlayer.isEnabled());


    if(onePlayer.isEnabled()){
        onePlayer.setEnabled(false);
        twoPlayer.setEnabled(true);
    }
    else{
        onePlayer.setEnabled(true);
        twoPlayer.setEnabled(false);
    }
    return true;
}

这似乎很容易,但我执行这个并且我总是得到相同的结果:

onePlayer = 假 twoPlayer = 真。

无论我点击多少次菜单,它都不会改变 isEnabled() 的结果。当然,GUI 上没有任何变化。

我确定问题出在 isEnabled() 上,因为此代码有效:

@Override
public boolean onPrepareOptionsMenu(Menu menu){
    super.onPrepareOptionsMenu(menu);

    MenuItem onePlayer = menu.findItem(R.id.Settings_OnePlayer);
    MenuItem twoPlayer = menu.findItem(R.id.Settings_TwoPlayer);

    System.out.println("onePlayer " + onePlayer.isEnabled() + " twoPlayer " + twoPlayer.isEnabled());

    if (onePlayercheck){
        onePlayer.setEnabled(false);
        twoPlayer.setEnabled(true);
    }
    else{
        onePlayer.setEnabled(true);
        twoPlayer.setEnabled(false);
    }
    onePlayercheck = !onePlayercheck;

    return true;
}

onePlayercheck 只是一个布尔值。

当然,它会不断返回:

onePlayer = 假 twoPlayer = 真。

但现在,我可以看到 GUI 上的变化。

如果最后一个代码有效,我想 setEnabled() 有效,但为什么 isEnabled() 返回总是相同的?变化应该持续存在,不是吗?

4

0 回答 0