web-dev-qa-db-ja.com

アクティビティのオプションメニューを取得するにはどうすればよいですか?

アクティビティのいくつかのメソッドでは、メニューのタイトルを確認したり、チェックされているかどうかを知りたいです。アクティビティのメニューを取得するにはどうすればよいですか。 this.getMenu()のようなものが必要です

38
Bobs

invalidateOptionsMenu()に注意してください。メニュー全体を再作成します。これには多くのオーバーヘッドがあり、SearchViewなどの埋め込みコンポーネントをリセットします。 SearchViewが「ランダムに」閉じる理由を突き止めるのにかなり時間がかかりました。

Darkが投稿したメニューをキャプチャし、必要に応じてonPrepareOptionsMenu(Menu)を呼び出しました。これは厄介な副作用なしで私の要件を満たしました。落とし穴:メニューが作成される前にonPrepareOptionsMenu()を呼び出す場合は、nullチェックを必ず行ってください。私はこれを以下のように行いました:

private Menu mOptionsMenu;

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    mOptionsMenu = menu
    ...
}

private void updateOptionsMenu() {
    if (mOptionsMenu != null) {
        onPrepareOptionsMenu(mOptionsMenu);
    }
}
110
Dustin

メニューオブジェクトを渡す代わりにinvalidateOptionsMenu()を呼び出します。

30
Diwakar Bhatia

menuオブジェクトをActivityクラスに渡すことで実行できます

public class MainActivity extends Activity
{
    ...
    ...
    private Menu _menu = null;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        _menu = menu;
        return true;
    }

    private Menu getMenu()
    {
        //use it like this
        return _menu;
    }
}
12
Dark

あなたがここで何を望んでいるかを理解できる限り、それはあなたを助けるかもしれません:

1。オプションメニュー でこのチュートリアルを参照してください。

2。ユーザーがメニューボタンを押すたびに、getTitle()を介してタイトルを確認できます。

3。または、ユーザーがメニューボタンを押していないときにチェックまたは選択した最後のメニュー項目を知りたい場合は、ユーザーがプレス。

1
Vineet Shukla

パラメータとしてメニューを提供するコールバックメソッドがいくつかあります。

そこで操作したいかもしれません。

例えば:

onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
onCreateOptionsMenu(Menu menu)
onCreatePanelMenu(int featureId, Menu menu)

アクティビティのドキュメントを見て、目的のメソッドを探すのがベストです: http://developer.Android.com/reference/Android/app/Activity.html

1
Ostkontentitan