0

Androidアプリのコンテキストメニューを作成しようとしていますDialogPreference(関連する場合は、APIレベル8をターゲットにしています)。ListViewちょっとしたハックでメニューを表示することができましたが(aの項目がクリックされたとき)、結果のコマンドを処理する方法がわかりません。私がこれまでに持っているのは:

  • 私のonItemClickハンドラーでは、次のことを行います。

    list.setOnCreateContextMenuListener (new ContextMenuGenerator(control, position));
    list.showContextMenuForChild (control);
    list.setOnCreateContextMenuListener (null);
    
  • ContextMenuGenerator次のことを行います。

    public class ContextMenuGenerator implements OnCreateContextMenuListener
    {
        // additional code redacted - not necessary for this question
    
        @Override
        public void onCreateContextMenu (ContextMenu menu, View v, ContextMenuInfo menuInfo)
        {
             new MenuInflater(context).inflate (R.menu.address_set_preference_popup, menu); 
        }
    }
    

これにより、適切なタイミングで正しいメニューが表示されますが、アイテムを選択した後に何が起こるかわかりません。私はそれが作成することonContextItemSelected(MenuItem)で呼び出されると思いますが、そこからそのイベントを処理できるコードに到達する方法がわかりません-それをサブクラス化する方法が見当たらず、方法がないようです外部リスナーをそれまたはのいずれかに接続します。私が考えていなかった他の方法はありますか?DialogDialogPreferenceDialogContextMenu

4

1 に答える 1

0

ダイアログまたはそれ自体にリスナーをアタッチする方法はないかもしれませんが含まれContextMenuている個々MenuItemのはリスナーインターフェイスをサポートしていることがわかります。したがって、答えは次のように変更することです。ContextMenuContextMenuGenerator

    @Override
    public void onCreateContextMenu (ContextMenu menu, View v, ContextMenuInfo menuInfo)
    {
        new MenuInflater(context).inflate (R.menu.address_set_preference_popup, menu);
        for (int i = 0; i < menu.size (); i ++)
            menu.getItem (i).setOnMenuItemClickListener (listener);
    }

ここlistenerOnMenuItemClickListener、コンストラクターに渡してフィールドに格納したものです。

于 2013-03-06T16:09:27.073 に答える