回避策は、表示されるアイテムの数が減らないようにすることです。Android 4 では、不要な場合は「その他」の項目が削除されますが、再度必要になった場合は追加できないようです。
コードをから変更しました
private void doPrepareOptionsMenu(Menu menu) {
boolean running = ...;
menu.findItem(R.id.menu_stop).setVisible(running);
menu.findItem(R.id.menu_start).setVisible(!running);
}
に
private void doPrepareOptionsMenu(Menu menu) {
boolean running = ...;
if (running) {
menu.findItem(R.id.menu_stop).setVisible(running);
menu.findItem(R.id.menu_start).setVisible(!running);
} else {
menu.findItem(R.id.menu_start).setVisible(!running);
menu.findItem(R.id.menu_stop).setVisible(running);
}
}
そして問題は消えました。違いは、最初に項目を表示してから、別の項目を非表示にすることです。
実行時に Android 2 のメニューを変更したことがない場合は、それがどのように機能するかについて説明します。
SomeListener someListener = new SomeListener() {
public void someStateChanged() {
// This runs NOT on the UI thread
runOnUiThread(new Runnable() {
public void run() {
updateUI();
}
});
}
}
そしてupdateUI()
最後にコードを呼び出します
Menu menu = weakRefOptionsMenu.get();
if (null != menu) {
doPrepareOptionsMenu(menu);
}
そしてもちろん、以下onPrepareOptionsMenu()
も呼び出しますdoPrepareOptionsMenu()
:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
doPrepareOptionsMenu(menu);
return true;
}