![](/img/trans.png)
[英]Android DialogPreference NullPointerException in onRestoreInstanceState
[英]Context menu in Android DialogPreference… is it possible?
我正在尝试为Android应用程序在DialogPreference
创建一个上下文菜单(定位到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); } }
这样可以在正确的时间显示正确的菜单,但是我不知道选择一个项目后会发生什么。 我假设在DialogPreference
创建的Dialog
上调用了onContextItemSelected(MenuItem)
,但我不知道如何从那里获取可以处理该事件的代码-我看不到对该Dialog
进行子类化的任何方法,也没有是否有一种将外部侦听器附加到它或ContextMenu
? 还有其他我没想到的方法吗?
可能没有办法将侦听器附加到Dialog或ContextMenu
本身,但是事实证明ContextMenu
包含的各个MenuItem
确实支持侦听器接口。 因此,答案是修改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
,我将其传递给构造函数并存储在字段中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.