我正在尝试在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}}。还有其他一些我没有想过的方法吗?
答案 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
。