0

私は 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() が常に同じ値を返すのはなぜですか? 変更は持続するはずですよね?

4

0 に答える 0