1

Android 4.0.4、HTC T-Mobile で次の不具合が見られます。

私のプログラムは、実行時にオプション メニューを変更します (つまり、「開始」ボタンを「停止」ボタンに置​​き換えるなど)。残念ながら、オーバーフロー メニューが表示されなくなり、少なくとも 1 つのメニュー項目が「失われました」。一見すると、私の場合、「その他」メニュー項目が別のメニュー項目「設定」に置き換えられているように見えます。

これは Android 2 では発生しません。

(回避策を見つけたので、他の誰かがこの問題に遭遇した場合に備えて投稿しています)

4

2 に答える 2

1

回避策は、表示されるアイテムの数が減らないようにすることです。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;
}
于 2013-01-11T06:21:53.047 に答える
1

元の問題に関連して、デフォルトで非表示になっている単一のメニュー項目がある場合があります。何らかのロジックに基づいて実行時にこのアイテムを表示することを計画している場合、4.0.4 デバイスでは表示されません。修正は、無効な、空のタイトルの、表示可能なアイテムを含めることです。

<item
    android:title=""
    android:visible="true"
    android:enabled="false"
    android:showAsAction="ifRoom"/>

<item
    android:id="@+id/my_item"
    android:title="My Item"
    android:visible="false"
    android:showAsAction="ifRoom"/>
于 2014-05-22T16:55:18.407 に答える