Почему я получаю это странное поведение, когда пользователь нажимает мою кнопку отправки?

#android #android-alertdialog

#Android #android-alertdialog

Вопрос:

У меня есть действие — форма с некоторыми текстовыми полями, и пользователь нажимает кнопку отправки после заполнения всех полей. Когда пользователь нажимает кнопку отправки, должно появиться диалоговое окно с предупреждением, а затем, когда пользователь нажимает OK, выполняется остальная часть кода OnClickListener. В настоящее время мой код выглядит примерно так.

прослушиватель для кнопки отправки / завершения:

 private final OnClickListener mFinishListener = new OnClickListener() {
    public void onClick(View v) {

    displayAlert();

    // Some other things to do here. Lets say showing some other activity   

};
  

Код диалогового окна предупреждения:

 public void displayAlert(){
    new AlertDialog.Builder(this).setMessage("Hi , I am Alert Dialog")  
    .setTitle("My Alert")  
    .setCancelable(true)  
    .setNeutralButton(android.R.string.ok,  
       new DialogInterface.OnClickListener() {  
       public void onClick(DialogInterface dialog, int whichButton){
           finish();
       }  
       })  
    .show(); 
}
  

Я получаю странный вывод. Когда я нажимаю кнопку отправки / завершения, мне отображается диалоговое окно с предупреждением, но оно исчезает до того, как я нажму кнопку OK. Почему?

Ответ №1:

 Hi this is working but don't write  finish(); after displayAlert(); function.

private final OnClickListener mFinishListener = new OnClickListener() {
@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
         displayAlert();
         //your code // don't write finish(); here if you write
    }
};

public void displayAlert(){
    new AlertDialog.Builder(this).setMessage("Hi , I am Alert Dialog")  
    .setTitle("My Alert")  
    .setCancelable(true)  
    .setNeutralButton(android.R.string.ok,  
       new DialogInterface.OnClickListener() {  
       public void onClick(DialogInterface dialog, int whichButton){
           finish();
       }  
       })  
    .show(); 
}
  

Ответ №2:

Код, который вы хотите выполнить после того, как пользователь нажмет OK, должен быть перемещен в метод onClick AlertDialog . Сразу после finish() . В противном случае он начнет выполняться во время отображения диалогового окна.

Ответ №3:

Если вы хотите закрыть только диалоговое окно

    public void onClick(DialogInterface dialog, int whichButton){
       dialog.dismiss();
   } 
  

Если вы хотите закрыть как диалоговое окно, так и закрыть действие

    public void onClick(DialogInterface dialog, int whichButton){
       dialog.dismiss();
       finish();
   }