【问题标题】:Android multiple dialogs to one OnClickListenerAndroid 多个对话框到一个 OnClickListener
【发布时间】:2016-06-29 11:34:46
【问题描述】:

是否可以将一个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 语句中写什么来正确确定选择了哪个对话框?

【问题讨论】:

  • 这种对话方式的目的是什么?
  • 尝试将dialog 传递给您的switch() 语句。
  • Sathish,因为我不想写相同的OnClickListeners,它的区别只有一两行。
  • Sripad,我试过了,但它不起作用,我遇到了错误。
  • 你能发布你遇到的错误吗?

标签: android switch-statement android-alertdialog


【解决方案1】:

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

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
      }
 }

【讨论】:

  • 谢谢,这正是我需要的。我无法使用switch-case而不是if-else来检查它?
  • 我不相信。我还没试过用switch。但是您可以尝试使用 switch(dialog.hashCode()) 并在 switch case 中使用 dialog1.hashcode()。
【解决方案2】:

1.只需创建一个新类即myListener并实现DialogInterface.OnClickListener接口

2.使用int参数创建构造函数

3.传递新类的引用而不是接口并传递 int 参数,稍后将在 switch statemnt 中使用,即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;
        }


    }
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多