我有一个简单的列表视图,在警报对话框中有一些复选框。我需要选择添加全选/全选,但您无法在警报对话框中调出菜单,我想通过按钮执行此功能。从我所看到的任何类型的按钮(正面、中性和负面)来看,无论如何都会关闭对话框。
那么,这可能吗?如果没有,我有什么选择?我最后的缓解方法是简单地创建一个新视图并重新创建所有内容。新观点是最好的解决方案吗?
我有一个简单的列表视图,在警报对话框中有一些复选框。我需要选择添加全选/全选,但您无法在警报对话框中调出菜单,我想通过按钮执行此功能。从我所看到的任何类型的按钮(正面、中性和负面)来看,无论如何都会关闭对话框。
那么,这可能吗?如果没有,我有什么选择?我最后的缓解方法是简单地创建一个新视图并重新创建所有内容。新观点是最好的解决方案吗?
那么,这可能吗?
不是来自AlertDialog
AFAIK 中的标准按钮。
如果没有,我有什么选择?
这里有一些:
AlertDialog
,而是使用以对话为主题的活动AlertDialog
,而是使用其他的子类Dialog
setAdapter()
,而是View
为对话框内容创建自己的选项)Dialog
,而是使用ListActivity
start via startActivityForResult()
(类似于 #2,只是不用担心主题)您必须覆盖按钮的 onClickListener。例如,对于中性按钮,您将拥有如下内容:
AlertDialog dialog = builder.create();
dialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Neutral", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.setButton(AlertDialog.BUTTON_POSITIVE, "Positive", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
Button neutralButton = dialog.getButton(DialogInterface.BUTTON_NEUTRAL);
neutralButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View onClick) {
/**
*
* your code
*
*/
}
});
那么,这可能吗?
您可以尝试使用以下方法将自定义视图放置在 AlertDialog 上:
android.app.AlertDialog.Builder.setView(View view)
该视图可以包含您的按钮。只需将 onClickListener 附加到将与您的列表视图一起操作的按钮。
您是否尝试过扩展 AlertDialog 类并让它实现 OnCLickListener
public class MyDialog extends AlertDialog implements OnClickListener {
private Button myButton;
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
// use LayoutInflater to get at custom button
LayoutInflater layoutInflater = (LayoutInflater)getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View contentView = layoutInflater.inflate( R.layout.mydialog_layout, null );
// pull button from layout, set listener
myButton = (Button)contentView.findViewById( R.id.myButtonId );
myButton.setOnClickListener( this );
setContentView( contentView );
}
public void onClick( View v ) {
if ( v.getId() == R.id.myButtonId ) {
// DO your button actions.
}
}
}
按照此模板,您可以放置所需的任何按钮并在对话框本身中创建自己的功能。您也可以在运行时创建自己的 Button,但您必须做额外的工作来配置按钮的文本、大小、图标等。
然后,您可以在 onCreateDialog() 调用下的活动中创建对话框。
protected Dialog onCreateDialog( int id ) {
MyDialog dialog = new MyDialog( this, 0 );
dialog.setOnCancelListener( this );
dialog.setOnDismissListener( this );
return dialog;
}
希望这可以帮助。
有可能的。解决方案是
重写dismiss
方法什么都不做。这将防止在单击任何按钮时关闭对话框。或者,您还可以保存原始的关闭。
修改您的 OnClickListener 以便在单击您想要的按钮时调用对话框的超类(即AlertDialog)的 dismiss() (即)。super.dismiss()
我通常让 Dialog 类成为监听器,所以我会做这样的事情
公共类 MyAlertDialog 扩展 AlertDialog 实现 OnClickListener { // 其他方法 @覆盖 公共无效解雇(){ } // 超类的关闭,当 OnClickListener 不是这个对话框时可能会派上用场 公共无效 normalDismiss() { super.dismiss(); } public void onClick(DialogInterface dialog, int which) { 开关(哪个){ 案例 BUTTON_NEGATIVE: // 处理你的事件 super.dismiss(); 休息; 案例 BUTTON_NEUTRAL: // 处理你的事件 休息; 案例 BUTTON_POSITIVE: 默认: // 处理你的事件 super.dismiss(); 休息; } } }
这样它只会在单击按钮 NEGATIVE 或 POSITIVE 时关闭对话框,但在按钮 NEUTRAL 时保持对话框显示。