2012-11-28 99 views
1

我正在具有4個活動Android應用程序:Android的活動流程&導航向上/向後

A - >乙 - 「ç - > d

當我從A到B,從B到C,或從C到D,我在意圖中放了一些額外的東西。

我猜這樣的導航很簡單:沒有必要重新定義後退按鈕,對於「向上」操作欄按鈕,簡單的「finish()」將是正確的方式來做到這一點( ?)

現在,問題是,從A,我也可以直接進入D.仍然不需要重新定義後退按鈕,它將返回到A,這就是我想要的,但對於「up 「按鈕,它必須去C,並從C,起來會導致B,...

什麼是正確的方法來做到這一點?

謝謝您的回答

+0

Stephane,謝謝你的打勾,你可能想看看我下面修改的答案。 – emrys57

回答

0

控制各種活動之間的流程明確,我叫finish()在每個活動時,我響應用戶的輸入通過啓動一個新的活動:

startActivity(intentForNewActivity); 
finish(); 

這導致了一部開拓創新活動的該實例被銷燬。在每個活動中,我都會創建一個意圖來啓動我想返回的活動。然後寫:

@Override public void onBackPressed() { 
    startActivity(intentWhereIWantToGoNext); 
    finish(); 
} 

我原來寫在這裏,我呼籲結束()中的onStop(),它不工作,而應用程序保持運行,但如果應用程序已停止以任何理由不得到期望的結果。對不起,我感謝PravinCG,儘管他的評論並不完全正確,但至少讓我更仔細地思考。

+0

這個提議@該解決方案是不推薦,你要管理活動堆棧和複雜堆棧,這可能無法正常工作。除此之外,如果你想達到這個目標,你可以簡單地把android:nohistory放在每個活動的清單中。 – PravinCG

+0

堆棧?沒有堆棧,每個活動在變得不可見時都會被銷燬,並且當它變得可見時從無到有進行重新創建。我同意,如果這些活動通常不具有存儲狀態,那麼很容易出錯,必須編寫所有正確的轉換,但還有什麼我可以弄錯的? – emrys57

+0

有一個活動堆棧,就順序而言。而你錯誤的是,每當它們變得不可見時,這些活動就會被破壞。請參閱Android的Activity LifeCycle。 http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle – PravinCG

0

其中一個方法是實際具有相同的堆棧,但用羣衆演員來進行切換。

比如:當你想從去A - > d 從A-> B-> C-> d去使用意圖來處理你是否想簡單地繞過活動或顯示。與此相反,用戶resultIntent的情況相反。

+0

好主意,謝謝! –

+0

@Stéphane:非常有幫助。你可以接受這個答案。 – PravinCG

+0

(接受的答案,對不起,首先使用Stack Overflow ^^) –

0

在最後一個括號之前放置以下代碼。

@Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     finish(); 
    }