2011-03-06 50 views
0

我希望能夠控制用戶可以按下後退按鈕的活動,具體取決於用戶當前位置。例如,我有活動A,B,C和D.如何控制「後退按鈕隊列」上的活動

用戶導航(通過我提供的按鈕)從活動A,到B,到C,最後到D.如果用戶向後按在D之前的時間,我想要正常的背部操作(如果他們按下活動C,他們將被呈現爲B)。

但是,如果他們讓一路d,我要完成活動B和C.現在,當用戶點擊後,我希望它們帶有A.

+0

您應該撥打D後退按鈕上的A活動。 – 2011-03-06 03:45:23

回答

3

這是可以做到輕鬆地攔截後退按鈕按鍵事件並提供您自己的處理代碼。

因此,在你的活動d,你就會有下面的代碼:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 

     // finish activties, change parents, whatever 

     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

EDIT(由於misuderstanding):

您可以通過以捆綁到以前的活動範圍內引用作爲您用於開始新活動的Intent內的額外內容。我相信上下文是可以parcelable的,所以你應該很好。順便說一句,您需要這些活動的上下文,以便您可以執行類似ActivityOneCOntext.finish();的操作。

[編輯,不工作]

然而,你應該小心這些引用,因爲每個活着參考一個活動的背景下防止垃圾回收器釋放分配給該活動的資源。如果你的Activity完成了,並且你仍然在另一個Activity的某個地方保存了一個引用,你將會有一個(某種)內存泄漏。

EDIT2:

顯然上面的代碼不能正常工作。

您可以使用此方法來獲得當前活動的父的上下文的引用:

Context parentContext = (Context) this.getParent(); 

所以,不用說,你可以有一個盛大父母的背景是這樣的:

Context gParentContext = (Context) ((this.getParent()).getParent()); 

你可以看到參考hare

+0

+1是什麼邏輯! – 2011-03-06 03:48:51

+0

如果我爲新Activity創建一個新的Intent,當我從那裏點擊時發生了什麼?它會回到活動D?然後我會無限循環。如果我完成活動D,它會回到C.這又是我同樣的問題。我想我真正的問題是如何得到舊活動的參考,以完善它們? – Corey 2011-03-06 04:23:47

+0

@Corey,你應該在你的問題中提到這一點。看到我編輯的答案。 – Shade 2011-03-06 15:42:48