So che posso ignorare il metodo onKeyDown
, ma voglio Back to do it's thing, solo due volte!Posso forzare il pulsante Indietro di Android per fare due passi indietro nello stack Attività?
risposta
Sto pensando in questo modo:
A -> B -> C
attività A, B, C.
Non si può fare un indietro due volte da quando il primo onKeyDown()
verrà eseguito in C e la seconda deve essere eseguito in B.
non so il motivo per cui si sta cercando di fare, ma qui ci sono alcune opzioni.
Utilizzando la
android:noHistory
tag:Forse la vostra attività di C sta facendo qualcosa che non ha bisogno di una vista ed è per questo che si desidera eseguire due volte.
Utilizzo di un intento. Qualcosa di simile:
Intent intent = new Intent(C.this, A.class); startActivity(intent);
Utilizzando la
finishActivityFromChild()
. Non l'ho mai provato, ma sembra che tu possa usarlo per decidere cosa fare in B a seconda di come è finito C.
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);
(per rendere questo pedagogica c'è più codice per questa attività sotto)
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 (di nuovo)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 123) {
if (resultCode == RESULT_OK) {
finish();
}
}
}
| * | Andando indietro di una schermata o di fine attività:
finish();
| * | Tornando più di una schermata:
Si può tornare a cui mai schermo avete bisogno utilizzando intenti e sull'uso di bandiere per evitare di tornare a stessa schermata:
Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class);
gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(gotoScreenVar);
C'è un [post sul blog Android devlopers' ] (http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html) sull'utilizzo del tasto Indietro. Basta configurarlo per tornare all'attività che desideri. –