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()所在的位置)将它们作为字段保存。