項目の 1 つを使用してオブジェクトをロックするメニューを作成しています。この項目をクリックすると、項目のロックを解除するためのボタンを含むメニューが再作成されます。そのために2つのメニューを作成しました。これはうまくいっています。Android バージョン >= 11 では、メニューを表示するときに onPrepareOptionsMenu が呼び出されなくなり、invalidateOptionsMenu() を呼び出す必要があることを読みました。そのため、ビルド ターゲット (マニフェストとプロパティの両方) を 11 に変更し、4.0.3 の AVD でアプリを実行しました。プログラムはまだ正常に動作していますが、もう動作しないはずだと思ったので、確認する必要があります
if (Build.VERSION.SDK_INT >= 11)
{
invalidateOptionsMenu();
}
これは私のコードです:
public class MainActivity3 extends Activity{
boolean locked;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locked = false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.changing_menu1, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
MenuInflater inflater = getMenuInflater();
if (locked) {
inflater.inflate(R.menu.changing_menu2, menu);
}
else {
inflater.inflate(R.menu.changing_menu1, menu);
}
return super.onPrepareOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.Menu1:
break;
case R.id.Menu2 :
break;
case R.id.Menu3 :
locked = !locked;
break;
}
return true;
}
}
そのため、メニューは 4.0 でも更新/再作成されています。invalidateOptionsMenu(); の使い方を誤解していませんか?