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;
}
}
}
}
是否可以将单个 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;
}
}
}
}