Android DialogPreference中的上下文菜单......有可能吗?

时间:2013-03-05 16:10:00

标签: android contextmenu dialog-preference

我正在尝试在DialogPreference中为Android应用创建一个上下文菜单(针对API等级8,如果相关的话)。我已经设法通过轻微的黑客来显示菜单(当点击ListView中的项目时),但我不知道如何处理任何结果命令。到目前为止我所拥有的是:

  • 在我的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)Dialog创建的DialogPreference上调用Dialog,但我不知道如何从那里获得我可以处理该事件的代码 - 我不知道看到任何子类化ContextMenu的方式,似乎也没有办法将外部监听器附加到它或{{1}}。还有其他一些我没有想过的方法吗?

1 个答案:

答案 0 :(得分:0)

可能无法将侦听器附加到对话框或ContextMenu本身,但事实证明MenuItem包含的个人ContextMenu 支持侦听器接口。因此,答案是修改ContextMenuGenerator因此:

    @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);
    }

其中listener是我传递给构造函数并存储在字段中的OnMenuItemClickListener