我需要显示AlertDialog
ListView
和ListView
项的上下文菜单。我更喜欢使用AlertDialog.Builder
并致电setItems()
,因此Builder
在ListView
内为AlertDialog
创建了一个风格化布局。对于样式化,它使用内部Android资源,因此我无法在我的代码中重新实现它。
问题在于我无法捕获上下文菜单项单击事件,因为默认AlertDialog.onMenuItemSelected()
实现不会将此类事件转发给父级:
public boolean onMenuItemSelected(int featureId, MenuItem item) {
return false;
}
我无法扩展AlertDialog.Builder
类并强制它创建我自己的AlertDialog
实例,并覆盖onMenuItemSelected()
,因为我需要覆盖AlertDialog.Builder.create()
。但它使用私有P
变量,该变量无法从派生类访问:
public AlertDialog create() {
final AlertDialog dialog = new AlertDialog(P.mContext, mTheme, false);
P.apply(dialog.mAlert);
dialog.setCancelable(P.mCancelable);
if (P.mCancelable) {
dialog.setCanceledOnTouchOutside(true);
}
dialog.setOnCancelListener(P.mOnCancelListener);
if (P.mOnKeyListener != null) {
dialog.setOnKeyListener(P.mOnKeyListener);
}
return dialog;
}
有没有办法强制AlertDialog.Builder
构建自定义AlertDialog
(覆盖onMenuItemSelected
方法)?
答案 0 :(得分:0)
我仍然没有找到问题的解决方案,但我发现了一些问题,这使解决方案变得毫无用处。对于Android 2.1,内置ListView
项(android.R.layout.select_dialog_item)在深灰色背景上显示为黑色文本,ListView
项目未与对话框消息分开({{1} })等等。
我终于切换回自己的setMessage()
,其AlertDialog
及其项目(ListView
未使用)的自定义布局。可以通过这种方式轻松捕获上下文菜单事件。
Luksprog,非常感谢您的评论。但主要的想法是尽可能使用尽可能多的程式化布局。 AFAIK,没有标准布局(AlertDialog.Builer
)提供您提到的按钮。此外,可以使用按钮偶尔删除项目。使用上下文菜单,至少需要两次单击才能删除项目。