Java 使用DialogInterface.OnClickListener区分单个对话框
我们有两个Java 使用DialogInterface.OnClickListener区分单个对话框,java,android,interface,dialog,switch-statement,Java,Android,Interface,Dialog,Switch Statement,我们有两个AlertDialog对象 AlertDialog dialog1, dialog2; 这两个对话框都是通过AlertDialog.Builder创建的 我们如何识别哪个对话框是DialogInterface.OnClickListener中的事件源 通过单个对话框,我们可以执行以下操作: AlertDialogInstance.setOnClickListener(myListener); //myListener public void onClick(DialogInterf
AlertDialog
对象
AlertDialog dialog1, dialog2;
这两个对话框都是通过AlertDialog.Builder
创建的我们如何识别哪个对话框是
DialogInterface.OnClickListener
中的事件源
通过单个对话框,我们可以执行以下操作:
AlertDialogInstance.setOnClickListener(myListener);
//myListener
public void onClick(DialogInterface arg0, int arg1) {
switch (arg1) {
case AlertDialog.BUTTON_NEGATIVE:
// do something
break;
case AlertDialog.BUTTON_POSITIVE:
// do something
break;
case AlertDialog.BUTTON_NEUTRAL:
// do something
break;
}
}
如何修改此开关
逻辑以处理多个对话框?(或者如果有更好的系统来处理对话框,而不是内联按钮回调,那是什么?我建议您在自定义侦听器中放入所需的参数
private class CustomOnClickListener implements OnClickListener {
private int id;
public CustomOnClickListener(int id) {
this.id = id;
}
public void onClick(DialogInterface dialog, int which) {
//check id and which
}
}
然后,当您将onClickListeners添加到对话框时,您只需向listener提供一个id。如果您的对话框有可区分的内容,您显然可以通过其内容直接告诉对话框:
private class CustomOnClickListener implements OnClickListener {
private int id;
public CustomOnClickListener(int id) {
this.id = id;
}
public void onClick(DialogInterface dialog, int which) {
//check id and which
}
}
private AlertDialog dialog1;
private AlertDialog dialog1;
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
dialog1 = new AlertDialog.Builder(this).setTitle("dialog1").create();
dialog1.setButton(AlertDialog.BUTTON_POSITIVE, "Yes", this);
dialog2 = new AlertDialog.Builder(this).setTitle("dialog2").create();
dialog2.setButton(AlertDialog.BUTTON_NEGATIVE, "NO", this);
}
@Override
public void onClick(final DialogInterface dialog, final int which)
{
if (dialog == dialog1)
{
if (which == AlertDialog.BUTTON_POSITIVE)
{
//
}
else if (which == AlertDialog.BUTTON_NEGATIVE)
{
//
}
}
else if (dialog == dialog2)
{
if (which == AlertDialog.BUTTON_POSITIVE)
{
//
}
else if (which == AlertDialog.BUTTON_NEGATIVE)
{
//
}
}
}
if(which==AlertDialog.BUTTON_NEGATIVE)return;
AlertDialog theDialog = (AlertDialog)dialog;
if(theDialog.findViewById(R.id.phoneinput)!=null) ...;//handle the phone
if(theDialog.findViewById(R.id.emailinput)!=null) ...;//handle the email
当然,这个解决方案不是通用的,但在某些情况下非常方便。比较对象比比较整数更糟糕。这是最糟糕的想法。此外,如果使用DialogFragments,您将在那里创建AlertDialogs,并且您不希望您的活动(onClick()所在的位置)将它们作为字段保存。