2015-12-31 14 views
5

sto mostrando finestra sull'attività Iniziamo con:Respingere l'attività di dialogo e vicino a stampa posteriore singola

mDialog.setCanceledOnTouchOutside(false); 

Quando l'utente preme il tasto back, la sua prima chiudere la finestra e poi premere nuovamente il pulsante Indietro Chiudi l'attività. Voglio farlo premendo una sola volta, chiudi la finestra di dialogo e chiudo l'attività. Ho provato ingegno il seguente codice anche:

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      // AppDialogUtils.mDialog.setCancelable(true); 
      // AppDialogUtils.mDialog.dismiss(); 
      mActivity.finish(); 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

risposta

9

impostare un mDialog.setOnCancelListener(listener) e chiudere il Activity in quel ascoltatore.

@Override 
mDialog.setOnCancelListener(new OnCancelListener() { 

    public void onCancel(DialogInterface interface) { 
     this.finish();    
    } 
}); 

In alternativa è possibile utilizzare un OnKeyListener per il vostro Dialog.

mDialog.setOnKeyListener(new Dialog.OnKeyListener() { 

     @Override 
     public boolean onKey(DialogInterface interface, int keyCode, 
       KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       this.finish(); 
      } 
      return true; 
     } 
    }); 
-3

sovraccarico del onBackPressed() evento propria attività e chiudere la finestra e l'attività nella stessa funzione.

@Override 
public void onBackPressed() { 
    dialog.dismiss(); 
    finish(); 
} 
+1

Questo è una soluzione pessima, perché devi mantenere l'oggetto 'dialog' in attività, inoltre puoi facilmente ottenere NPE. Segnalazione di bassa qualità. –

2

Usa OnCancelListener

alertDialog.setOnCancelListener(new OnCancelListener() { 

    public void onCancel(DialogInterface dialog) { 
     // finish activity    
    } 
}); 
+0

grazie per la tua ottima risposta, hai salvato la mia giornata :-) – Deepak

-2

Questo può funziona per voi.

prima non credo che questo funziona

mDialog.setCanceledOnTouchOutside(false); 

è possibile utilizzare

dialog.setCancelable(false); 

ora le sue opere come si voleva.

0

se la finestra è aperta quindi

dialog.dismiss(); 

questo renderà respingere la vostra finestra di dialogo e se si desidera premere di nuovo quindi utilizzare questa linea

@Override 
public void onBackPressed() { 
super.onBackPressed(); 
    finish(); 
} 

questo sarà il lavoro per voi

+0

questo non ha funzionato, già provato – Deepak

Problemi correlati