2011-05-06 13 views
13

sé cómo cancelar la espalda pulsación de tecla, de modo que el/ventana principal de la actividad permanece visible:onBackPressed para ocultar No destruir la actividad

public void onBackPressed() { 
    return;    
} 

mi objetivo es ocultar la actividad, sin embargo, sin terminar, cómo hacer lo haces en el evento onBackPressed?

es decir, me gustaría llegar hasta onPause(), pero no evocar el comportamiento predeterminado de onBackPressed() que esencialmente llama a finish(). Otra forma de decirlo es que me gustaría imitar onUserLeaveHint()?

¡Alguna ayuda apreciada!

Respuesta

44

Si quiere imitar el botón "Inicio" en actividades específicas simplemente hacer esto:

A continuación API 5:

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

Por encima y en la API de 5:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

Moverá la Tarea al fondo ... cuando regrese, será como era.

Se puede ver más información sobre esto aquí: Override back button to act like home button

+10

¡Terminé con esto, una fantástica solución de trabajo de una sola línea! 'public void onBackPressed() { \t moveTaskToBack (true); \t return; } ' – Cel

+1

Ese método está disponible en las API más recientes, por supuesto, también debe anularlo. :-) – neteinstein

+0

Hii, esto esconde toda mi aplicación pero solo quiero ocultar una actividad en particular no toda una aplicación .. –

1

Bueno, no puede retroceder en la pila actual sin finish ing la actividad. Tal vez usted podría detectar onBackPressed() y luego lanzar la intención hogar en una nueva tarea:

public void onBackPressed() { 
    Intent i = new Intent("android.intent.action.MAIN"); 
     i.addCategory("android.intent.category.HOME"); 
     i.addCategory("android.intent.category.DEFAULT"); 
     i.addCategory("android.intent.category.LAUNCHER"); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(i); 
    return;    
} 

Quiero saber si funciona.

+0

no probé éste como el de una línea solución de NeTe funcionó, pero gracias de todos modos! – Cel

+0

Ese es un método ingenioso: no sabía que estaba allí. – Femi

4

Si no destruye su actividad debe establecer acitvity modo de lanzamiento a single_instance y utilizar moveTaskToBack (verdadero) para enviar al fondo.

13

Si quiere imitar el botón "Inicio" en actividades específicas:

primera Método:

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

segunda Método:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

y si quieres para pasar a la actividad anterior sin destruir la corriente:

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

Y ahora desde cualquier actividad si desea abrir la actividad que está en segundo plano. Yo llamo CurrentActivity. Podrías llamarlo desde cualquier lugar ... igual ... tomarás esa actividad y lo pondrás en la cima de la pila. y ábrelo donde lo dejaste.

Intent intent = new Intent(FromAnyActivity.this, CurrentActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intent); 

Banderas:

FLAG_ACTIVITY_REORDER_TO_FRONT: Para reordenar la actividad de la pila

FLAG_ACTIVITY_CLEAR_TOP: Para eliminar todas las actividades de la parte superior

Cuestiones relacionadas