2012-09-20 6 views
6

何かの理由で、onCreateOptionsMenu()は私のアプリでAFTER onResume()と呼ばれています...したがって、UIを設定している間にメニューを保持できません(onCreate()onResume()の間)。私のActionBarの対応するアクション項目を設定することができます...UI設定時にActionBarメニューを保持する方法は?

私が今までに見つけた唯一の回避策は、onCreate()の直前に手作業でinvalidateOptionsMenu()を呼び出すことです。そのようにすれば、onCreateOptionsMenu()が直ちに呼び出され、メニューが保持され、最終的に必要なアクション項目を追加できます。

誰でもこの問題を経験しましたか? onCreateOptionsMenu()onResume()の後に呼び出された場合のアクションアイテムをプログラムで設定する方法を教えてください。私のアプリはJellyBean上で実行されている

、それは内蔵のアクションバー(ノーActionBarSherlock)を使用し、android:minSdkVersion="14"android:targetSdkVersion="16"

+0

クイック健全性チェック、あなたは右、* *活動についてのonCreate&onResumeを話していますか?フラグメントの対応するメソッドとは異なります。 –

+0

メニューアイテムを 'onCreateOptionsMenu()'でセットアップできないのはなぜですか?(単に後で使うためにメニューへの参照を保存するのではなく) – user113215

+1

私はここでuser113215と一緒にいるのですが、なぜonResume()のメニューについて知っておく必要がありますか?それは正しいとは思わない。 – dmon

答えて

6

まず、おそらくあなたがこれを行うべきではないことを考えます。あなたのアイデアがAndroid向けの典型的なデザインパターンに反するかもしれないように思えます。たとえば、ユーザーの選択に応じてメニューが変更されている場合は、代わりにコンテキストアクションモードを使用する必要があります。 Action Bar API Guideから

  • :一般的なルールとして

    、オプションメニュー(おろかアクション項目)のすべての項目は、アプリのグローバルな影響力を持っている、というよりも小さい部分のみに影響を与える必要がありますインターフェイスの[...]したがって、メニュー項目をアクション項目として表示するかどうかを決定する前に、項目に現在のアクティビティのグローバルスコープがあることを確認してください。 Menu API Guideから

  • あなたが現在フォーカスでViewに基づいてオプションメニュー内の項目を変更することはありません。タッチモード(ユーザーがトラックボールまたはDパッドを使用していないとき)では、ビューにはフォーカスがかからないため、オプションメニューの項目を変更するための基準としてフォーカスを使用しないでください。文脈依存のメニュー項目をViewに提供する場合は、Context Menuを使用します。あなたが説明したように、メニュー項目を変更したいならば、あなたはonPrepareOptionsMenu()に変更を加える必要があり、ことをバーリング


。イベントが発生してメニュー項目を変更する必要がある場合は、該当する情報をフィールドに入力し、invalidateOptionsMenu()に電話してください。 onPrepareOptionsMenu()をオーバーライドし、フィールドの値を確認して、追加/削除するメニュー項目を決定します。

invalidateOptionsMenu()を呼び出して表示する必要があるメニュー項目を変更するには、onCreateOptionsMenu()を変更することもできますが、この方法は推奨されません。)

Menu API Guideから

より:

あなただけの初期 メニュー状態を作成し、活動のライフサイクル中に変更を加えることがないonCreateOptionsMenu()を使用する必要があります。 アクティビティのライフサイクル中に発生するイベントに基づいてオプションメニューを変更する場合は、 onPrepareOptionsMenu()メソッドで行うことができます。

このメソッドでは、Menuオブジェクトが現在存在するので、 アイテムの追加、削除、無効化などの変更が可能です。 (断片も onPrepareOptionsMenu()コールバックを提供する。)アンドロイド2.3.x以降と下部に

  • に、システムは、ユーザがオプションメニュー(メニューボタンを押す)を開くたびonPrepareOptionsMenu() を呼び出します。

  • Android 3.0以降では、メニューバーがアクションバーに表示されているときに、オプションメニューは常に と表示されます。イベント が発生し、メニュー更新を実行する場合は、 invalidateOptionsMenu()を呼び出して、システムコール onPrepareOptionsMenu()を要求する必要があります。

+0

偉大な答え、ありがとうあなたの入力のための多く:) –

関連する問題