2013-10-27 44 views
0

我目前正在寫一個聊天應用程序。它基本上與WhatsApp非常相似: 在啓動時會有上次對話概述。Android BackStack清除,但保持根

當我想開始一個我必須做一個新的會話/傳

  1. 最後談話概要活動(點擊+來尋找對話夥伴)
  2. 課程活動(選擇課程)
  3. 學員活動(選配夥伴)
  4. 對話活動

使基本上是堆棧:[A1,A2,A3,A4]

現在,用戶與某個課程成員進行了很好的聊天,並希望返回上一個對話概述,但是當他按下後退按鈕時, A3,「課程參與者活動」。

我希望用戶通過按下A4中的後退按鈕返回到A1。

WRONG:[A1,A2,A3,A4] - >回 - > [A1,A2,A3]
RIGHT:[A1,A2,A3,A4] - >回 - > [A1]

或者我能想象

RIGHT:〔A1,A2,A3] - >啓動A4 - > [A1,A4]

在此先感謝。

[編輯]

答案

它原來是這兩種的組合。

in onOptionsItemSelected()由於給定的谷歌約定,我把這個(在開關情況當然)。你 清單launchMode爲singleTop:

final Intent intent = new Intent(this, MainPage.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

定義活動A1的Android。

爲什麼組合?剛剛添加平面Intent.FLAG_ACTIVITY_CLEAR_TOP殺死活動A1。由於這是我的拳頭活動,因此它包含了一些註冊/檢查實施。當我在它被銷燬之後再次開始這個活動時,創建被不必要地調用。

發射模式singletop阻止了這一點。

回答

2

定義活動A1的android:launchModesingleTop在您的清單。 回手柄按下按鈕在活動A4和開始您的活動A1象下面這樣:

Intent intent = new Intent(A4.this, A1.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(intent); 

有了這個您的A2,A3將被從堆棧清除。

See more for intents.

編輯:這會爲你的[A1,A2,A3,A4]工作 - >回 - > [A1]要求

1

試着做一致的Android設計。後退按鈕返回一項活動。

改爲使用Action Bar的主頁按鈕。

Android design pattern for navigation;

創建動作條:

final ActionBar actionBar = getActionBar(); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
actionBar.setDisplayHomeAsUpEnabled(true); 

回到頂部意圖得到了點擊爲homeButton時:

final Intent intent = new Intent(this, MainPage.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent);