2012-05-15 163 views
1

(我知道活動組和標籤已被棄用,目前我無法重新設計我的應用,因此如果可能,我想用當前設計完成它。)更改標籤時取消活動組中的兒童活動

我有三個標籤,A,B,和C.選項卡C是具有兩個子活動,C1和C2的一個的ActivityGroup TabActivity。 C2始終由C1調用,並通過設置C1視圖並重新啓動C1意圖來解除。所有這些工作正常。我的問題是,如果用戶在C2活動中選擇A或B選項卡,我希望C2活動取消。下次選擇C標籤時,應顯示C1活動。如果用戶退出應用程序並重新輸入應用程序,則也是如此。

我已經實現了OnTabChangeListener(),所以我知道當選擇一個新的標籤,我甚至可以告訴我們,如果C2標籤被激活(或爲標籤改變之前)。我的問題是如何取消C2活動,以便在選擇C選項卡時,將啓動默認的C1活動,而不是返回到先前活動的C2選項卡。

回答

0

簡單的,你可以利用你的onPause()選項卡中的C,並與你也可以使用從C2到C1取回的相同的代碼覆蓋它。由於onPause()只有在您退出特定選項卡時纔會被調用,您的活動組將在後臺恢復,當您返回該選項卡C時,您可以在第一個地方看到您的C1。

+0

我想到了這一點,但我退出C2至C1的方法是重新啓動與C1鑑於C1意圖和的setContentView()。這將導致問題在切換到新選項卡活動(A或B) – Digilee

+0

試試看吧..我不認爲這會造成你,除非你正在使用網絡太在活動 –

+0

我來試試這個,明天的任何問題,謝謝 – Digilee

1

我認爲你可以使用廣播發送器和接收器用於這一目的。在onpause中創建一個廣播接收器。我建議這樣做,因爲如果你想從任何其他地方完成C2,那麼你可以通過發送廣播輕鬆完成。使用此代碼:

BroadcastReceiver broadcast_receiver = null; // DECLARE IT IN YOUR CLASS. 

// WRITE BELOW CODE IN onPause OF C2 ACTIVITY. 
broadcast_receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals("finish_c2")) { 
      unregisterReceiver(broadcast_receiver); 
      finish(); 
     } 
    } 
}; 
    registerReceiver(broadcast_receiver, new IntentFilter("finish_c2")); 

要完成您的活動,只需發送任何地方的廣播。

//WRITE THE BELOW CODE WHERE YOU WANT TO FINISH C2 ACTIVITY. 
Intent intent = new Intent("finish_c2"); 
sendBroadcast(intent); 

希望它能幫助您詢問是否有任何問題發生。

+0

這可能有效,但它似乎是一個奇怪的方式去做。我如何通過Activity Group onPause()調用完成兒童活動? – Digilee

+0

你不打電話完成兒童活動。您只打算完成C2活動的完成。您只從兒童活動發送廣播。不要擔心這個代碼,我已經在我的模塊中測試了幾次,並且工作正常。例子是A-> B-> C,像A start B和B Start C現在你想從C中移除B.如果你能完成活動B,那麼A會自動在C的下面,因爲它是一個Stack,如果你的刪除B然後C自動下移。 –

+0

還有其他方法可以做到這一點。一個是不完成活動B.在你的活動C中設置一個標誌,然後在活動B的onActivityResult中接收到你的標誌,如果標誌爲真,那麼完成活動B.以這種方式,活動B將在那裏,但活動的結束將是如此迅速沒有人能夠知道是否有任何活動B存在與否......所以不同的方式選擇合適的.. –