2016-06-29 3 views
0

Можно ли назначить один OnClickListener одному AlertDialog?Несколько диалоговых окон Android для одного OnClickListener

Вот это сам Диалоги:

 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 заявление правильно определить, какой диалог был выбран?

+0

Что цель этого способа Диалог? –

+0

попробуйте передать 'dialog' в ваш оператор' switch() '. – SripadRaj

+0

Sathish, потому что я не хочу писать те же 'OnClickListeners', которые отличаются только одной-двумя строками. – Alex

ответ

1

Не показывать диалог непосредственно, построить диалог и присвоить его переменной, как:

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

установить те же listners

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

Спасибо, это то, что мне нужно. Я не могу проверить это с помощью 'switch-case', а не' if-else'? – Alex

+0

Я верю, что нет. Я еще не пробовал переключиться. Но вы можете попробовать с помощью switch (dialog.hashCode()) и использовать dialog1.hashcode() в случаях переключения. –

-1

1.Simply создать новый класс ИЭ myListener и интерфейс DialogInterface.OnClickListener

2.Создать конструктор с аргументом int

3.PASS ссылка нового класса вместо интерфейса и передача Int аргумент, который будет впоследствии использовать в переключатель 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; 
     } 


    } 
} 
} 
Смежные вопросы