2011-11-16 15 views
5

Sto cercando di catturare l'evento del pulsante Indietro per Android. So che c'è molto su questo già sui moduli, tuttavia, il mio codice non funziona come gli esempi forniti. Qui è il mio frammento di codice per acquisire l'evento:Non riesco a catturare l'evento del pulsante Indietro di Android

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){ 
    if(keyCode == KeyEvent.KEYCODE_BACK){ 
     Log.d(TAG, "back key captured"); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

Ho provato anche questo:

@Override 
public void onBackPressed(){ 
    Log.d(TAG, "in onBackPressed"); 
    finish(); 
} 

L'uscita dal LogCat che o evento stato licenziato non compare. Qualcuno sa una possibile ragione per questo?

Grazie.

+1

Iniziare aggiungendo un registro prima del test per assicurarsi di andare nel metodo. In caso contrario, assicurati che la tua vista sia quella attualmente focalizzata. Altrimenti non otterrà gli eventi onKey. –

+0

Nel primo esempio, quando si preme il pulsante Indietro, si verifica il comportamento predefinito? –

risposta

15

Un altro metodo per eseguire l'override del metodo . È più semplice e più facile da fare.

+0

hmmm Ho appena provato e non ha funzionato. Vedi la mia modifica. – coder

+3

Davvero? È piuttosto strano, lo stai facendo da un'attività ordinaria e non viene mostrato nulla? Forse prova a mostrare un brindisi quando viene premuto il pulsante Indietro per ricontrollare che il tuo debugger non abbia problemi. – Brian

-1

Ecco come ho implementato la gestione dell'evento premuto tasto indietro.

/** 
    * onKeyDown method 
    * 
    * Executes code depending on what keyCode is pressed. 
    * 
    * @param int keyCode 
    * @param KeyEvent 
    *   event KeyEvent object 
    * 
    * @return true if the code completes execution, false otherwise 
    * 
    */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) {   
    switch (keyCode) { 
    case KeyEvent.KEYCODE_BACK: 
     Log.d(TAG, "back key captured"); 

     this.onBackPressed(); 

     //You could also use this.moveTaskToBack(true) to return to the Home screen 

     return true; 

    default: 
     return super.onKeyDown(keyCode, event); 
    } 
    }// end onKeyDown 
2

Viene visualizzata la tastiera software? Quella vista catturerà prima il tasto indietro per eliminarlo prima che il tuo codice possa gestirlo.

+0

In realtà sto cercando di utilizzare il tasto Indietro per ignorare la propria tastiera personalizzata – coder

+1

molto in ritardo, ma per chiunque altro inciampi su questa domanda, http://stackoverflow.com/questions/3940127/intercept-back-button-from- la tastiera virtuale può essere molto utile nel caso in cui l'approccio standard di Activity # onBackPressed() non funzioni. – qix

8

Per ricevere un evento tastiera, una vista deve essere attiva. Per forzare questo uso:

view.setFocusableInTouchMode(True); 
view.requestFocus(); 
1

Questo funziona per me

private long lastBackPressTime = 0; 
    @Override 
public void onBackPressed() { 
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) { 
     Toast.makeText(this, R.string.backButtonWarning, 4000).show(); 
     this.lastBackPressTime = System.currentTimeMillis(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

Ultimamente iv'e avuto modo di sperimentare una quantità enorme di problemi dovuti al plugin ADT, che fai te generare file di risorse apropiate (R) . Quindi ricontrolla il tuo progetto

1

La mia situazione potrebbe essere inusuale, ma ho avuto lo stesso identico comportamento, quindi ho pensato di condividerlo con la classe! La ragione è stata che all'interno del mio evento onResume() per l'attività, stavo iniziando un'altra attività. Quell'attività si stava concludendo prima di aver mai visualizzato un'interfaccia utente, ma significava che il "onResume" per la mia attività principale veniva continuamente chiamato ogni volta che la sottoattività veniva completata e gli eventi del pulsante back sembravano scomparire nella sottoattività.

Problemi correlati