studio programacion pasar otro navegar móviles fragments entre destruir desde desarrollo curso boton atras aplicaciones activity abrir android android-activity

programacion - navegar entre fragments android studio



¿Puedo forzar el botón Atrás de Android para retroceder dos pasos en la pila de actividades? (3)

Sé que puedo anular el método onKeyDown , pero quiero Back para hacerlo, ¡solo 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 esto 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 (otra vez)

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


Estoy pensando en esto de esta manera:

A -> B -> C

A, B, C actividades.

No puede hacer un respaldo 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 hacerlo, pero aquí hay algunas opciones.

  1. Usando la etiqueta android:noHistory :

    Quizás su actividad C está haciendo algo que no necesita una vista y es por eso que quiere retroceder dos veces.

  2. Usando un intento. Algo como:

    Intent intent = new Intent(C.this, A.class); startActivity(intent);

  3. Usando finishActivityFromChild() . Nunca lo intenté, pero parece que puedes usarlo para decidir qué hacer en B, dependiendo de cómo termine C.


| * | Retrocediendo una pantalla o actividad final:

finish();

| * | Retrocediendo más de una pantalla:

Puede volver a la pantalla que necesita con intención y usar indicadores 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);