Deshabilitar el botón de retroceso en Android

334

¿Cómo deshabilitar el botón de retroceso en Android al cerrar la sesión de la aplicación?

Gracia
fuente
1
¿Puedes ser un poco más claro sobre la pregunta? Si está buscando sobrescribir el comportamiento predeterminado del botón Atrás, consulte esta pregunta aquí. stackoverflow.com/questions/2000102/…
Gopinath
26
No haga esto a menos que tenga una buena razón, ya que romper el modelo de operación esperado perjudica muy levemente a toda la plataforma
Hamy
14
Debería hacerlo si tiene que lidiar con un estúpido Samsung S4 donde el botón de retroceso es sensible al tacto (no físico), justo en el borde del teléfono, que ya es tan sensible al tacto que una palma apoyada contra el costado regresa.
Ajoman
1
Está en contra de la guía de calidad y diseño de Android , rol UX-N1.
MiguelSlv

Respuestas:

651

Anule el método onBackPressed y no haga nada si desea manejar el botón Atrás en el dispositivo.

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}
Gopinath
fuente
12
Esto es mucho mejor y más limpio que anular los métodos de manejo de claves, y tiene el mismo efecto. ¡Gran respuesta!
Nik Reiman
2
Gran solución amigo. ¿Hay alguna manera de hacer esto con el botón de inicio?
Datta Kunde
1
¡Esto es genial! En realidad, siempre quise volver a mi actividad principal al presionar hacia atrás desde cualquier otra actividad, y anular este método me permite hacerlo muy fácilmente.
Jim
¡Vaya! Olvidé eliminar super.onBackPressed ().
Aristo Michael
173

Si busca un nivel de API 2.0 superior y superior, esto funcionará muy bien

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

Si busca un nivel de API de Android de hasta 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);    
}

Escriba el código anterior en su Actividad para evitar presionar el botón Atrás

Javanator
fuente
55
Este método es más compatible con versiones anteriores que el uso de onbackpressed debido al requisito de nivel de API de
onbackpressed
55
Gran respuesta. Aunque no lo necesito para mi proyecto, agradezco que haya proporcionado los métodos antiguos y nuevos. Esto debe marcarse como respuesta correcta. +1
Jim
1
@Javanator el segundo no funcionaría para mí (para el nivel 16 de API, por ejemplo), pero el primero funciona de
maravilla
38

Puede hacerlo de esta manera simple . No llame a super.onBackPressed ()

Nota: - No haga esto a menos y hasta que tenga una buena razón para hacerlo.

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}
Iman Marashi
fuente
66
Una explicación de "por qué no" sería genial. Gracias.
Casi un principiante
¡No llamar a .super es importante!
Corrió el
3
@almostabeginner porque no llamar a super invalidará el uso normal del botón de retroceso. los usuarios se asustarán cuando un botón que funciona normalmente deja de funcionar. pueden pensar que la aplicación tiene errores o que el teléfono no funciona correctamente, etc. al final, su aplicación será la culpable.
bengongon97
23

Simplemente anule el método onBackPressed () .

@Override
public void onBackPressed() { }
Pankaj kumar
fuente
13

Lo estoy 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..............
}
Mahmudul Haque Khan
fuente
9

Si desea asegurarse de que su aplicación de cliente de Android se desconecte de algún servidor antes de que su Actividad sea eliminada -> cierre la sesión con un servicio en su propio hilo (eso es lo que se supone que debe hacer de todos modos).

Deshabilitar el botón Atrás no resolverá nada por ti. Todavía tendrá el mismo problema cuando el usuario reciba una llamada telefónica, por ejemplo. Cuando se recibe una llamada telefónica, su actividad tiene tantas posibilidades de ser asesinado antes de recibir una respuesta confiable de la red.

Es por eso que debe dejar que un servicio espere en su propio hilo la respuesta de la red, y luego intentarlo nuevamente si no tiene éxito. El servicio de Android no solo es mucho menos probable que lo maten antes de recibir una respuesta, sino que si realmente lo matan antes de terminar el trabajo, AlarmManager siempre puede revivirlo para intentarlo nuevamente.

Stephan Branczyk
fuente
8

Simplemente anule el método onBackPressed () y no necesite llamar a la superclase del método onBackPressed u otros.

@Override
public void onBackPressed()
{

}

O pase su actividad actual al método onBackPressed ().

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

Reemplace su nombre de actividad requerida por myActivity.

si está utilizando un fragmento, primero llame al método callParentMethod ()

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

luego llame al método vacío

@Override
public void onBackPressed()
{

}
Zakaria Hossain
fuente
6

si está utilizando FragmentActivity. entonces haz esto

primera llamada Esto dentro de tu Fragment.

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

y luego llame al onBackPressedmétodo al lado de su FragmentActivityclase principal .

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

Simplemente usando este código: si desea desactivar la contrapresión, no use super.OnBackPressed ();

@Override
public void onBackPressed() {

}
Seda T.
fuente
4

Si desea deshabilitar su aplicación al cerrar sesión, puede abrir un cuadro de diálogo no cancelable.

Ted Hopp
fuente
4

Puede anular el onBackPressed()método en su actividad y eliminar la llamada a la superclase.

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

Solo necesita anular el método para el botón Atrás. Puede dejar el método vacío si lo desea para que no ocurra nada cuando presione el botón Atrás. Por favor, eche un vistazo al siguiente código:

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

Aparte de estos dos métodos de la respuesta anterior.

onBackPressed () (API Nivel 5, Android 2.0)

onKeyDown () (API Nivel 1, Android 1.0)

También puede anular el dispatchKeyEvent()(Nivel API 1, Android 1.0) de esta manera,

dispatchKeyEvent() (API Nivel 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);
}
Kris Roofe
fuente
3

Desactivar el botón trasero en android

@Override
public void onBackPressed() {
    return;
}
Mahesh Bokhani
fuente
2

Para mí, simplemente anular onBackPressed()no funcionó, pero señalar explícitamente qué actividad debería comenzar funcionó bien:

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

Prueba esto:

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

   return true;
 }
   return super.onKeyDown(keyCode, event);    
}
mohamad sheikhi
fuente
1

Retirar super.onBackPressed()del public void onBackPressed()trabajo genial. Está probado en Android 9

Golil
fuente