我有一个包含两个选项的菜单,我只想在选择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 = false twoPlayer = true。
无论我点击菜单多少次,它都不会改变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 = false twoPlayer = true。
但现在,我可以看到GUI上的更改。
如果最后一个代码有效,我认为setEnabled()有效,但为什么isEnabled()返回总是相同?变化应该持续下去,不是吗?