使用DialogInterface.OnClickListener区分单个对话框

时间:2011-10-03 14:08:33

标签: java android interface dialog switch-statement

我们有两个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逻辑以处理多个对话框? (或者,如果有更好的系统来处理对话框,除了内联按钮回调,它是什么?)

3 个答案:

答案 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

当然,解决方案不是通用的,但在某些情况下非常方便。