0

我正在尝试在DialogPreferenceAndroid 应用程序中创建上下文菜单(如果相关,则针对 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

可能无法将侦听器附加到 Dialog 或ContextMenu自身,但事实证明包含的单个MenuItems确实支持侦听器接口。因此,答案是这样修改: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);
    }

wherelistenerOnMenuItemClickListener我传递给构造函数并存储在字段中的。

于 2013-03-06T16:09:27.073 回答