Come gestire il pulsante Indietro in attività


136

Come gestire un pulsante Indietro in un'attività? Ho dei pulsanti. Se faccio clic su uno dei pulsanti, viene reindirizzato ai pulsanti richiesti. Funziona benissimo ma quando premo il pulsante indietro si finisce.

Come risolvere questo problema. Ho una sola attività per tutti quei pulsanti. Grazie in anticipo.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

Ho usato il codice sopra per gestire il pulsante Indietro ma non funziona. Quando premo il pulsante indietro è colpito lì stesso.

Risposte:


326

Puoi gestirlo in questo modo:

per livello API 5 e superiore

@Override
public void onBackPressed() {
    // your code.
}

più vecchio di API 5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

6
Che dire dei frammenti?
crushman

1
Sì, qualcuno sa come farlo da un frammento
James Wierzba,

3
@ james-wierzba gestiscono l'attività e delegano l'elaborazione a un frammento
Grigorii Chudnov

19

Oltre a quanto sopra, mi raccomando personalmente

onKeyUp():

Programatically Parlando keydown scatterà quando l'utente preme un tasto inizialmente , ma si farà ripetere mentre l'utente mantiene il tasto premuto. *

Questo rimane vero per tutte le piattaforme di sviluppo.

Lo sviluppo di Google ha suggerito che se si sta intercettando il pulsante INDIETRO in una vista, è necessario tenere traccia di KeyEvent con starttracking sul keydown, quindi richiamare con keyup.

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()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

15

Sia per il pulsante back del dispositivo hardware che per il pulsante soft (back) ad es. "<-" questo è ciò che funziona per me. (* Nota Ho un'attività / barra degli strumenti nell'attività)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            //finish();
            onBackPressed();
            break;
    }
    return true;
}



@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}

Saluti!


Ho usato finish e non ritorna all'attività precedente.
Si8,

2
"finish ()" chiude solo la tua attività corrente. Devi gestire il ritorno alla tua attività precedente usando l'intento. A proposito, la tua attività precedente dovrebbe essere ancora aperta se non l'hai "finita ()" durante la navigazione da essa in precedenza.
S bruce,

Sto testando qualcosa e ti aggiornerò. Grazie per la risposta.
Si8,

1
Usa semplicemente super.onBackPressed () invece di finish ()
b00n12

9

Un approccio più semplice è catturare il pulsante Indietro e chiamare moveTaskToBack (true) come segue:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Android 2.0 ha introdotto un nuovo metodo onBackPressed e questi consigli su come gestire il pulsante Indietro


9

Dovresti usare:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

Come definito qui: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

Se stai utilizzando una versione precedente per compilare il codice, sostituisci android.os.Build.VERSION_CODES.ECLAIR con 5 (puoi aggiungere ad esempio un int privato chiamato ECLAIR)


1

Questo mi ha aiutato ..

@Override
public void onBackPressed() {
    startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();
}

O????? anche tu puoi usare questo anche per attivare / disattivare il cassetto

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}

Spero che questo ti possa aiutare .. :)


1

Questo è un modo semplice di fare qualcosa.

    @Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

Penso che potrebbero esserci modi più elaborati per farlo, ma mi piace la semplicità. Ad esempio, ho usato il modello sopra per far uscire l'utente dall'applicazione E POI tornare a un'altra attività di mia scelta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.