¿Puedo obligar al botón de retroceso de Android a retroceder dos pasos en la pila de actividad?

Sé que puedo anular el método onKeyDown , pero quiero volver a hacer es cosa, sólo dos veces!

FirstActivity

 Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); 

SecondActivity

 int REQUEST_CODE = 123 Intent intent = new Intent(SecondActivity.this, ThirdActivity.class); startActivityForResult(intent, REQUEST_CODE); 

(Para hacer este pedagógico hay más código para esta actividad a continuación)

ThirdActivity

 @Override public void onBackPressed() { // Semi ugly way of supporting that back button takes us back two activites instead of the usual one. setResultOkSoSecondActivityWontBeShown(); finish(); } private void setResultOkSoSecondActivityWontBeShown() { Intent intent = new Intent(); if (getParent() == null) { setResult(Activity.RESULT_OK, intent); } else { getParent().setResult(Activity.RESULT_OK, intent); } } 

SecondActivity (de nuevo)

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 123) { if (resultCode == RESULT_OK) { finish(); } } } 

Estoy pensando en ello de esta manera:

 A -> B -> C 

A, B, C actividades.

No se puede hacer una copia dos veces ya que el primer onKeyDown() se ejecutará en C y el segundo se ejecutará en B.

No sé por qué estás tratando de hacer, pero aquí hay algunas opciones.

  1. Uso del android:noHistory tag :

    Tal vez su actividad C está haciendo algo que no necesita una vista y es por eso que desea volver dos veces.

  2. Usando una intención. Algo como:

     Intent intent = new Intent(C.this, A.class); startActivity(intent); 
  3. Utilizando el finishActivityFromChild() . Nunca lo he probado, pero parece que puedes usarlo para decidir qué hacer en B, dependiendo de cómo termine C.

| * | Retroceder una pantalla o terminar actividad:

 finish(); 

| * | Volviendo más de una pantalla:

Puede regresar a la pantalla que necesite usar con intención y usar banderas para evitar volver a la misma pantalla:

 Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class); gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(gotoScreenVar); 
  • El modo de inmersión de Android se restablece al cambiar la actividad
  • Android: el inicio de la aplicación de 'aplicaciones recientes' comienza con el último conjunto de extras utilizados en una intención
  • ¿Cómo se muestran 2 vistas en 1 actividad (android)?
  • ¿Cómo obtener los extras de intención si la actividad es `singleTask`?
  • Animación de transición entre actividades con AnimationSet
  • ¿Por qué onDestroy siempre se llama cuando regresa a la actividad de los padres?
  • Título de la actividad de Android vs Título de ActionBar
  • Control de la parte posterior "botón" en android
  • DialogFragment sin FragmentActivity
  • Android envía evento táctil a la actividad principal cuando se muestra el cuadro de diálogo
  • Iniciar la actividad principal si la pila de actividades está vacía
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.