2010-08-24 18 views
7

Ho un'applicazione per Android 2.1 e voglio sovrascrivere il pulsante Indietro.Android - onBackPressed() non funzionante

Ho seguito l'esempio qui:

http://android-developers.blogspot.com/2009_12_01_archive.html

E il mio codice è il seguente:


@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5 
       && keyCode == KeyEvent.KEYCODE_BACK 
       && event.getRepeatCount() == 0) { 
      Log.d("CDA", "onKeyDown Called"); 
      onBackPressed(); 
     } 

     return true; 
    } 

    @Override 
    public void onBackPressed() { 
    Log.d("CDA", "onBackPressed Called"); 
     Intent setIntent = new Intent(Intent.ACTION_MAIN); 
     setIntent.addCategory(Intent.CATEGORY_HOME); 
     setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(setIntent); 

     return; 
    } 

Funziona su dispositivi pre 2.x, ma doesn lavorare su Hero con 2.1 update-1 e un Nexus One con 2.2.

C'è qualcosa che mi manca nell'esempio? O qualcuno può far notare perché non funziona?

Non riesco nemmeno a premere il pulsante nel logcat.

risposta

11

Stai usando onKeyUp()?

Usa solo onKeyDown() in 1.x Android o onBackPressed() in Android 2.x

4

Alcune ricerche rapide suggeriscono di posizionare l'intercettazione Indietro durante onKeyUp(): http://developer.android.com/sdk/android-2.0.html. Vale la pena provarlo. Il seguente codice è direttamente dal sito:

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK 
      && event.getRepeatCount() == 0) { 
     event.startTracking(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() 
      && !event.isCanceled()) { 
     // *** DO ACTION HERE *** 
     return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 
+0

Grazie che lavora su dispositivi 2.x ora ma non lo eseguito sul dispositivo 1.6 come API sopra è disponibile solo da API livello 5 in poi –

0

si dovrebbe chiamare costruttori genitore.

In onKeyDown() chiamata metodo

super.onKeyDown(); 

in onBackPressed()

super.onBackPressed(); 
Problemi correlati