Android 多个对话框到一个 OnClickListener

Android multiple dialogs to one OnClickListener

是否可以将单个 OnClickListener 分配给一个 AlertDialog

这是对话框本身:

        AlertDialog.Builder dialog1 = new AlertDialog.Builder(PrefActivity.this);
        dialog1.setTitle("Dialog 1");
        dialog1.setPositiveButton("ok" , myListener);

        AlertDialog.Builder dialog2 = new AlertDialog.Builder(PrefActivity.this);
        dialog2.setTitle("Dialog 2");
        dialog2.setPositiveButton("ok" , myListener);

这是听众:

        DialogInterface.OnClickListener myListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (???){
                    case dialog1:
                    break;

                    case dialog2:
                    break;
                }
            }
        };

我应该在那些 switch-case 语句中写什么才能正确确定选择了哪个对话框?

不要直接显示对话框,构建一个对话框并将其分配给一个变量,如:

dialog1 = new AlertDialog.Builder(PrefActivity.this);
dialog1 = builder1.create();
dialog2 = new AlertDialog.Builder(PrefActivity.this);
dialog2 = builder2.create();

设置相同的监听器

new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
      if(dialog == dialog1){
            //Dialog 1
      } else if(dialog == dialog2) {
            //Dialog 2
      }
 }

1.Simply 创建一个新的 class 即 myListener 并实现 DialogInterface.OnClickListener 接口

2.Create 带有 int 参数的构造函数

3.Pass 引用新的 class 而不是接口并传递 int 参数,稍后将在 switch 语句中使用,即 dialog.setPositiveButton("OK",new myListener(int))

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
static int dialog1 = 1;
static int dialog2 = 2;
Button button, button2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (Button) findViewById(R.id.button);
    button2 = (Button) findViewById(R.id.button2);

    button.setOnClickListener(this);
    button2.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    if (view == button) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Dialog 1");
        builder.setMessage("this is first dialog");
        builder.setPositiveButton("ok", new myListener(dialog1));
        builder.show();
    }
    if (view == button2) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Dialog 2");
        builder.setMessage("this is second dialog");
        builder.setPositiveButton("ok", new myListener(dialog2));
        builder.show();
    }
}


class myListener implements DialogInterface.OnClickListener {
    int dialogNo;

    public myListener(int dialogNo) {
        this.dialogNo = dialogNo;


    }

    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        switch (dialogNo) {
            case 1:
                Toast.makeText(MainActivity.this, "Dialog first", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(MainActivity.this, "Dialog second ", Toast.LENGTH_SHORT).show();
                break;
        }


    }
}
}