2011-03-15 16 views
107

Cómo controlar un botón Atrás en una actividad. Donde tengo algunos botones Si hago clic en uno de los botones está redirigiendo a los botones que necesitaba. Funciona bien pero cuando presiono el botón Atrás se termina.Cómo controlar el botón Atrás en la actividad

Cómo solucionar este problema. Tengo solo una actividad para todos esos botones. Gracias de antemano.

@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); 
    } 

He usado el código anterior para manejar el botón Atrás pero no funciona. Cuando presiono el botón Atrás, se golpea allí mismo.

Respuesta

263

Se puede controlar de esta manera:

para el nivel 5 de la API y una mayor

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

mayores de API 5

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

    return super.onKeyDown(keyCode, event); 
} 
+0

Cuidado, esto es solo para API Nivel 5 (Android 2.0 y superior) – Blundell

+0

ya estoy usando API Nivel 5 (Android 2.1) – Shekhar

+4

¿Qué tal en fragmentos? – crushman

8

Un approac más sencillo h es capturar el botón Atrás prensa y llamar moveTaskToBack (verdadero) de la siguiente manera:

@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 introdujo un nuevo método onBackPressed y these recommendations sobre cómo manejar el botón Atrás

+0

No, no funciona ... – Shekhar

8

que puedes usar:

@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; 
} 

Tal como se define aquí: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

Si está utilizando una versión anterior para compilar el código, reemplace android.os. Build.VERSION_CODES.ECLAIR por 5 (se puede añadir una ECLAIR privada int llamado así por ejemplo)

13

Además de lo anterior recomiendo personalmente

onKeyUp(): 

Hablando Programaticallykeydown se disparará cuando se deprime los usuarios una clave inicialmente pero Es se repite mientras el usuario mantiene presionada la tecla. *

Esto sigue siendo cierto para todas las plataformas de desarrollo.

El desarrollo de Google sugirió que si está interceptando el botón ATRÁS en una vista, debe rastrear el evento KeyEvent con starttracking en keydown y luego invocar 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); 
} 
0

Esto me ayudó ..

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

O ????? incluso se puede utilizar este para el cajón de palanca también

@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(); 

} 

espero que esto le ayudaría a ..:)

8

Para el botón de retroceso del dispositivo de hardware y el botón de inicio suave (retroceso), p. "< -" esto es lo que funciona para mí. (* Nota Tengo una aplicación barra/barra de herramientas en la actividad)

@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(); 

} 

Salud!

+0

Terminé y no vuelve a la actividad anterior . – Si8

+1

"finalizar()" solo cierra su actividad actual. Debe manejar volver a su actividad anterior mediante el uso de intención. Por cierto, su actividad anterior aún debe estar abierta si no la "finalizó()" cuando navegaba desde ella anteriormente. –

+0

Estoy probando algo y lo actualizaré. Gracias por la respuesta. – Si8

Cuestiones relacionadas