我有一个包含两个选项的菜单,我只希望当我选择一个 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() 返回总是相同的?变化应该持续存在,不是吗?