1

別のもので戻る。3.0以降のAndroidバージョンと連携する必要がある小さなアプリを取得しようとしていますが、処理方法がわからないものがあります..

次のように定義された、アクション バーにより適したオプション メニューをアップグレードしました。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:titleCondensed="@string/menu_sheet_photo_comp" android:title="@string/menu_sheet_photo" android:id="@+id/mnuCamera" android:icon="@android:drawable/ic_menu_camera" android:showAsAction="ifRoom" />
    <item android:titleCondensed="@string/menu_sheet_notes_comp" android:title="@string/menu_sheet_notes" android:id="@+id/mnuLogText" android:icon="@drawable/ic_menu_compose" />
    <item android:titleCondensed="@string/menu_sheet_track_comp" android:title="@string/menu_sheet_track" android:id="@+id/mnuTrack" android:icon="@android:drawable/ic_menu_compass" />
    <item android:titleCondensed="@string/menu_sheet_geocache_comp" android:title="@string/menu_sheet_geocache" android:id="@+id/mnuGC" android:icon="@drawable/ic_menu_emoticons" android:showAsAction="ifRoom" />

アクティビティが実行されると、写真 (最初の写真) が携帯電話のアクション バーに表示されますが、他の写真は表示されません。現在、オプションの可用性はいくつかの要因に依存しています。

そのため、Activity の起動の開始時に、Web データを取得するためにスレッドが送信されます。そしてonCreateOptionsMenu()、最初の項目を無効にします。(ウェブデータが戻ってきて、写真が撮れることを確認するまで、写真を撮ることはできません。)

以前のバージョンのアプリでは簡単でしonPrepareOptionsMenu()た。ステータスを確認し、必要に応じてオプションを有効または無効にしていました。さて、ここで私はどうすればいいのか分からない -

カメラ ボタンはオーバーフロー メニューではなくアクション バー上にあるため、ユーザーがタップしてonPrepareOptionsMenu()も呼び出されないため、ボタンは無効のままです。

では、バックグラウンド スレッドが戻ってきて、ボタンを有効にできることがわかったら、どうすればそのボタンを有効にできるのでしょうか?

乾杯 - マイク。

4

2 に答える 2

7

invalidateOptionsMenu()を呼び出し、有効化/無効化のためにonCreateOptionsMenu()にチェックを追加するか、プログラムでメニューを作成し、Menuインスタンスをどこかに保持して、後で有効にできるようにします。

于 2012-11-03T02:19:26.233 に答える
2

上で stoilkov が言ったことは、私が使用するアプローチです。より明示的には、バックグラウンド スレッドが戻った時点でフラグを設定し、isCamButtonEnabled を false に呼び出してから、invalidateOptionsMenu() を呼び出します。これにより、 onCreateOptionsMenu が呼び出されてメニューが再生成されます。最後のピースは、isCamButtonEnabled の状態に応じてカメラ ボタンを無効にするように onCreateOptionsMenu を変更することです。まったく別のメニュー リソースをロードすることで、これを行うことができます。

if(isCamButtonEnabled) {
    getMenuInflater().inflate(R.menu.cam_enabled_menu, menu);
} else {
    getMenuInflater().inflate(R.menu.cam_disabled_menu, menu);   
}

または、常に同じメニュー リソースをロードし、事後にカメラ ボタンを無効にするか非表示にします。

于 2012-11-03T02:31:13.603 に答える