21

API 11以降をターゲットにした場合に、Android 3.0以降で(もしあれば) onPrepareOptionsMenu(Menu)(さらには)がどのように使用されるのか知りたいです。onPreparePanel(int, View, Menu)

私の考えは次のとおりです。

Activity'sは、XMLメニューリソースを拡張するか、アイテムを直接追加するか、または両方の組み合わせを行うことができるActionBarコンテンツを受け取ります。onCreateOptionsMenu(Menu)アクティビティのフラグメントもこの呼び出しを受け取り、同じことを行うオプションがあります。

ActionBarの項目を更新するには、Menuインスタンスを保持するか、呼び出すことができます。これにより、再びinvalidateOptionsMenu()呼び出されます。onCreateOptionsMenu(Menu)

したがって、onPrepareOptionsMenu(Menu)API 11以降を対象としないレガシーアプリケーションをサポートするためだけにまだ存在しているのでしょうか?

呼び出して、おそらく呼び出しgetActionBar().hide()getActionBar().show()トリガーしますか?onPrepareOptionsMenu(Menu)

フラグメントを追加または削除すると、どういうわけかこれがトリガーされますか?

4

2 に答える 2

10

私の広範なテストから、それはプラットフォームの3.0より前のバージョンとまったく同じように機能し、オーバーフローメニューが開かれたときにのみ呼び出されるように見えます。元の質問にリストされているイベントのいずれでも、コールバックは発生しませんでした。

おそらく明白ですが注目に値する事実:このコールバックではメニュー全体にアクセスできるため、アクションバー、オーバーフローメニュー、および/または非表示に表示される項目の操作が可能です。

于 2011-05-25T19:16:34.707 に答える
4

私は最近同様の質問をして、これに困惑しました。後の読者のために追加したいと思います。はい、onPrepareOptionsMenuはまだ機能します。ただし、Honeycombデバイスの標準実装を呼び出す必要があります(つまり、if(android.os.Build.VERSION.SDK_INT> = 11)return super.onPrepareOptionsMenu(menu);)そしてinvalidateOptionsMenu()を使用します(必要に応じてリフレクションを介して)代わりにonCreateOptionsMenu()、特に。showAsActionを使用する場合。それ以外の場合、メニューは開かれるまで更新されません。たとえば、アイテムが選択されたときにいくつかのエントリを追加すると、アイテムが選択されたときではなく、メニューが開いたときにアイテムがアクションバーに魔法のように表示されます。メニュー項目の選択解除と非表示についても同じことが言えます。

于 2011-08-12T10:50:36.530 に答える