我们有两个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;
}
}
如何修改此switch
逻辑以处理多个对话框?
(或者,如果有更好的系统来处理对话框,除了内联按钮回调,它是什么?)
答案 0 :(得分:5)
我建议你把所需的param放在自定义监听器中。
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添加到对话框时,您只需向侦听器提供一个id。
答案 1 :(得分:3)
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)
{
//
}
}
}
答案 2 :(得分:0)
如果您的对话框具有可区分的内容,您显然可以通过其内容直接告诉对话:
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
当然,解决方案不是通用的,但在某些情况下非常方便。