2010-04-07 1 views

risposta

2

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.

  1. 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.

  2. Utilizzo di un intento. Qualcosa di simile:

    Intent intent = new Intent(C.this, A.class); 
    startActivity(intent); 
    
  3. 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.

21

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(); 
     } 
    } 
} 
0

| * | 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);