我有一个简单的列表视图,在警告对话框中有一些复选框。我需要选择添加select all / none,但是你不能在警告对话框中显示菜单,我想从一个按钮执行此功能。从我所看到的任何一种按钮(正面,中性和负面)都可以关闭对话框。
那么,这可能吗?如果不是,我有什么替代品?我的最后一个缓解是简单地创建一个新视图并重新创建所有内容。是最佳解决方案的新视图吗?
答案 0 :(得分:6)
那么,这可能吗?
不是来自AlertDialog
,AFAIK中的标准按钮。
如果不是,我有哪些替代方案?
以下是一些:
AlertDialog
,而是使用以对话为主题的活动AlertDialog
,而是使用Dialog
setAdapter()
,而是为对话框内容创建自己的View
)Dialog
,而是ListActivity
通过startActivityForResult()
启动(类似于#2,只是不用担心主题)答案 1 :(得分:5)
您必须覆盖按钮的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
*
*/
}
});
答案 2 :(得分:0)
那么,这可能吗?
您可以尝试使用以下方法将自定义视图放在AlertDialog上:
android.app.AlertDialog.Builder.setView(View view)
该视图可以包含您的按钮。只需将onClickListener附加到可与列表视图一起使用的按钮。
答案 3 :(得分:0)
您是否尝试过扩展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;
}
希望这有帮助。
答案 4 :(得分:0)
有可能。解决方案是
将dismiss
方法改为不执行任何操作。这将阻止在单击任何按钮时对话框被忽略。或者,您也可以保存原始解雇。
修改OnClickListener,使其在对话框中调用超类(即 AlertDialog )的dismiss()(即super.dismiss()
)单击所需的按钮。
我通常将Dialog类作为监听器,所以我会做这样的事情
public class MyAlertDialog extends AlertDialog implements OnClickListener { // other methods @Override public void dismiss() { } // superclass's dismiss, might come in handy when the OnClickListener is not this dialog public void normalDismiss() { super.dismiss(); } public void onClick(DialogInterface dialog, int which) { switch (which) { case BUTTON_NEGATIVE: // handle your event super.dismiss(); break; case BUTTON_NEUTRAL: // handle your event break; case BUTTON_POSITIVE: default: // handle your event super.dismiss(); break; } } }
这样只有在单击NEGATIVE或POSITIVE按钮时才会关闭对话框,但是当按钮NEUTRAL为时,会保持显示对话框。