私は 2 つのオプションを持つメニューを持っています。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() が常に同じ値を返すのはなぜですか? 変更は持続するはずですよね?