Не могу закрыть пользовательский диалог - PullRequest
1 голос
/ 20 июня 2011
//About Button in the principal menu       
final Button button3 = (Button) findViewById(R.id.button3);

button3.setOnClickListener(
    new OnClickListener() {

    public void onClick(View v) {                
        //set up dialog
        Dialog dialog = new Dialog(MainMenu.this);
        dialog.setContentView(R.layout.maindialog);
        dialog.setTitle("About");
        dialog.setCancelable(true);

        //now that the dialog is set up, it's time to show it    
        dialog.show();

        Button closeButton = (Button) dialog.findViewById(R.id.Button01);
//      closeButton.setOnClickListener(new Button.OnClickListener() { 
//          public void onClick(View view) { 
//              dialog.dismiss();
//          }
//      });

        if(v==closeButton)
            dialog.dismiss();
    }
});

У меня есть этот код, но увольнение не работает.

У меня есть кнопка «о», и когда я нажимаю на нее, появляется диалоговое окно. Затем в диалоговых окнах есть кнопка «ОК», и эта кнопка «ОК» должна закрыть диалоговое окно, но «отклонение» не работает. Не могли бы вы помочь мне узнать, почему ??

Ответы [ 3 ]

7 голосов
/ 20 июня 2011

Во-первых, ваш диалог должен находиться в области действия вашего класса, поэтому вы должны объявить

public Dialog dialog;

вне всяких методов. Затем в вашем методе onCreate() создайте диалог, как у вас уже есть. Оставьте только вызовы show() и dismiss() для OnClickListeners.

Ваши кнопки будут выглядеть так:

Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        dialog.show();
    }
});

Button closeButton = (Button) dialog.findViewById(R.id.Button01);
closeButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        dialog.dismiss();
    }
});

Кроме того, хорошо бы придумать соглашение об именах, которое будет работать для вас, а не вводить случайные или не прописные буквы ресурсов (например, Button03 против button1);

1 голос
/ 14 марта 2016

Инициализировать диалог за пределами OnClickListener.

Dialog dialog = new Dialog(MainMenu.this);
dialog.setContentView(R.layout.maindialog);

button3.setOnClickListener(new OnClickListener() {           
       public void onClick(View v) {              
         dialog.show();    
       }
});

Button closeButton = (Button) dialog.findViewById(R.id.Button01);
closeButton.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {
          dialog.dismiss();
       }
});
1 голос
/ 20 июня 2011

Вы также можете написать общий onClick для обеих кнопок, как это.Это позволит избежать переписывания события onClick для каждой кнопки. Его будет легко обслуживать.

public void onClick (View v) {

   switch(v.getId())
   {
       case R.id.button3:
           dialog.show();

       case R.id.Button01:
           dialog.dismiss();
   }


}
...