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.
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.
Usando un intento. Algo como:
Intent intent = new Intent(C.this, A.class); startActivity(intent);
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);