Ho letto diversi post sull'utilizzo di questo, ma deve mancare qualcosa perché non funziona per me. La mia attività A ha launchmode = "singleTop" nel manifest. Inizia l'attività B, con launchmode = "singleInstance". L'attività B apre un browser e riceve e restituisce, motivo per cui è singleInstance. Sto provando a sovrascrivere il pulsante Indietro in modo che l'utente venga rimandato all'attività A e possa quindi premere Indietro per abbandonare l'attività, anziché tornare di nuovo all'attività B.
// activity B
@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) onBackPressed();
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
startActivity(new Intent(this, UI.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
return;
}
Dopo essere tornato dal browser, lo stack è ... A, B, Browser, B
Mi aspetto che questo codice cambi lo stack in ... A ... in modo che premendo ancora una volta indietro l'utente torni alla schermata principale.
Invece sembra cambiare lo stack in ... A, B, Browser, B, A ... come se quei flag non ci fossero.
Ho provato a chiamare finish () nell'attività B dopo startActivity, ma poi il pulsante indietro mi riporta di nuovo al browser!
Cosa mi manca? Grazie!
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
farà proprio questo.