Disabilita il pulsante Indietro in Android


334

Come disabilitare il pulsante Indietro in Android durante la disconnessione dell'applicazione?


1
Puoi essere un po 'più chiaro sulla domanda? Se stai cercando di sovrascrivere il comportamento predefinito del pulsante Indietro, fai riferimento a questa domanda qui. stackoverflow.com/questions/2000102/…
Gopinath,

26
Per favore, non farlo a meno che tu non abbia una buona ragione, poiché rompere il modello operativo previsto fa un po 'male all'intera piattaforma
Hamy,

14
Ti piacerebbe farlo se hai a che fare con uno stupido Samsung S4 in cui il pulsante Indietro è sensibile al tocco (non fisico), proprio sul bordo del telefono, che è già così sensibile al tocco che un palmo appoggiato al lato lo farà torna indietro.
garlicman,

Risposte:


651

Sostituisci il metodo onBackPressed e non fare nulla se intendevi gestire il pulsante Indietro sul dispositivo.

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}

12
Questo è molto meglio e più pulito rispetto alla sostituzione dei metodi di gestione delle chiavi e ha lo stesso effetto. Bella risposta!
Nik Reiman,

2
Ottima soluzione amico. C'è un modo per fare così con il pulsante Home?
Datta Kunde,

1
Questo è fantastico! In realtà, volevo sempre tornare alla mia attività principale quando torno indietro da qualsiasi altra attività e ignorare questo metodo mi permette di farlo molto facilmente.
Jim,

Oops Ho dimenticato di rimuovere super.onBackPressed ().
Aristo Michael,

173

Se stai cercando un livello API 2.0 superiore e superiore funzionerà alla grande

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}

Se stai cercando un livello API Android fino a 1.6.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

Scrivi il codice sopra nella tua attività per impedire la pressione del pulsante Indietro


5
Questo metodo è più compatibile con le versioni precedenti rispetto all'utilizzo di onbackpressed a causa del requisito del livello api di
onbackpressed

5
Bella risposta. Anche se non ne ho bisogno per il mio progetto, apprezzo che tu abbia fornito sia il vecchio che il nuovo metodo. Questo dovrebbe essere contrassegnato come risposta corretta. +1
Jim

1
@Javanator il secondo non funzionerebbe per me (ad esempio per il livello API 16), ma il primo funziona come un incantesimo
noloman

38

Puoi farlo in modo semplice Non chiamare super.onBackPressed ()

Nota: - Non farlo a meno che e fino a quando non si hanno validi motivi per farlo.

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}

6
Una spiegazione del "perché no" sarebbe ottima. Grazie.
Quasi un principiante il

Non chiamare .super è importante!
Ha funzionato il

3
@almostabeginner perché non chiamare super invaliderà l'uso normale del pulsante Indietro. gli utenti impazziranno quando un pulsante normalmente funzionante smetterà di funzionare. potrebbero pensare che l'app sia difettosa o che il telefono non funzioni correttamente, ecc. la tua app sarà la causa alla fine.
bengongon97,

23

Sostituisci semplicemente il metodo onBackPressed () .

@Override
public void onBackPressed() { }

13

Lo sto usando .............

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK)
        Toast.makeText(getApplicationContext(), "back press",      
     Toast.LENGTH_LONG).show();

    return false;
       // Disable back button..............
}

9

Se vuoi assicurarti che la tua applicazione client Android sia disconnessa da alcuni server prima che la tua Attività venga uccisa -> esci con un servizio sul suo thread (è comunque quello che dovresti fare).

Disabilitare il pulsante Indietro non risolverà nulla per te. Avrai comunque lo stesso problema quando l'utente riceve una telefonata, ad esempio. Quando si riceve una telefonata, la tua attività ha più possibilità di essere ucciso prima che ottenga una risposta affidabile dalla rete.

Ecco perché dovresti lasciare che un servizio attenda sul proprio thread la risposta dalla rete e quindi riprovare se non riesce. Il servizio Android non è solo molto meno probabile che venga ucciso prima di ricevere una risposta, ma se dovesse davvero essere ucciso prima di terminare il lavoro, può sempre essere rianimato da AlarmManager per riprovare.


8

Sovrascrivi il metodo onBackPressed () e non è necessario chiamare la super classe del metodo onBackPressed o altri.

@Override
public void onBackPressed()
{

}

Oppure passa la tua attività corrente al metodo onBackPressed ().

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

Sostituisci il nome dell'attività richiesta in myActivity.

se stai usando il frammento, prima di tutto chiama il metodo callParentMethod ()

public void callParentMethod(){
    context.onBackPressed(); // instead of context use getActivity or something related
}

quindi chiama il metodo vuoto

@Override
public void onBackPressed()
{

}

6

se stai usando FragmentActivity. allora fai così

prima chiamata Questo dentro di te Fragment.

public void callParentMethod(){
    getActivity().onBackPressed();
}

e poi chiama il onBackPressedmetodo a fianco della tua FragmentActivityclasse genitore .

@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}

5

Basta usare questo codice: se si desidera disabilitare la funzione di contropressione, non utilizzare super.OnBackPressed ();

@Override
public void onBackPressed() {

}

4

Se si desidera disabilitare l'app durante la disconnessione, è possibile visualizzare una finestra di dialogo non cancellabile.


4

È possibile ignorare il onBackPressed()metodo nella propria attività e rimuovere la chiamata alla superclasse.

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}

3

Devi solo sostituire il metodo per il pulsante Indietro. Se lo desideri, puoi lasciare vuoto il metodo in modo che non accada nulla quando premi il pulsante Indietro. Si prega di dare un'occhiata al codice qui sotto:

@Override
public void onBackPressed() 
{
   // Your Code Here. Leave empty if you want nothing to happen on back press.
}

3

A parte questi due metodi dalla risposta sopra.

onBackPressed () (API Level 5, Android 2.0)

onKeyDown () (API Level 1, Android 1.0)

Puoi anche sostituire dispatchKeyEvent()(API Level 1, Android 1.0) in questo modo,

dispatchKeyEvent() (API Level 1, Android 1.0)

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.dispatchKeyEvent(event);
}

3

Disabilita buttton posteriore in Android

@Override
public void onBackPressed() {
    return;
}

2

Per me, solo l'override onBackPressed()non ha funzionato, ma indicare esplicitamente quale attività dovrebbe iniziare ha funzionato bene:

@Override
public void onBackPressed(){
  Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
  startActivity(intent);
}

1

Prova questo:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode == KeyEvent.KEYCODE_BACK) {

   return true;
 }
   return super.onKeyDown(keyCode, event);    
}

1

rimuovere super.onBackPressed()dal public void onBackPressed()lavoro alla grande. è testato su Android 9

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.