2011-06-15 39 views
2

我有一個TabActivity,這是我的應用程序中的「基本」Activity。從TabActivity用戶可以瀏覽不屬於原始TabHost的新活動(我不會搞亂TabGroups或類似的東西)。從其他活動移回到上一個活動,不知道活動在堆棧中的位置

我的應用程序還有一個全局選項菜單,用戶應該能從這個菜單導航回原來的TabActivity並選擇某個選項卡。例如,如果用戶選擇了最左邊的選項菜單項,則它們將轉到原始TabActivity中最左邊的選項卡。

我該如何做到這一點?我做不是想開始一個新的TabActivity,因爲原來的TabActivity有數據傳播它像地圖點和ListView。理想情況下,我想回到具體的TabActivity。這個動作也可以發生在生命週期的任何一點,如:

原始TabActivity - >活性1 - >活性2 - > Activity3 - >活動ñ - >返回到原始TabActivity

原始TabActivity - >活性1 - >回到原始TabActivity

在導航之間可以有任何數量的活動啓動。因此,在當前Activity中調用finish()將不會滿足此(據我所知......)。

我的問題/顧慮:

  1. 首先,如何做到這一點。
  2. 有可能是原TabActivity可以從棧由於內存,正確的被刪除?如果是的話,該如何處理?我想如果我想出了一個辦法找到原始TabActivity我可以做一個檢查空,如果它不存在,開始新的TabActivity
+0

確切的問題,我當前的情況! – sam 2017-07-21 08:21:09

回答

4

想通了這一點。你應該在你的清單使用launchMode="singleTask"爲您要切換回特定Activity。根據Dev docs,如果存在,則返回到該特定的Activity

所以,在我的清單,我有:

<activity 
     android:name=".MainTabsActivity" 
     android:launchMode="singleTask" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar" > 
    </activity> 

而且,在你想切換回那個TabActivity任何Activity,只需撥打一個正常Intent。您還可以使用putExtra()告訴TabActivity切換到一個新的標籤。

在一個子活動:

 Intent mainTabsSearchIntent = new Intent(this, MainTabsActivity.class); 
     mainTabsSearchIntent.putExtra("tabval", 0); 
     startActivity(mainTabsSearchIntent); 

,這樣就會將推出一個新的MainTabsActivity如果棧沒有一個可以切換回舊的實例,因爲launchMode="singleTask"參數。

爲了在主TabActivity提供的標籤切換功能,覆蓋onNewIntent(Intent intent)像這樣:

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    Log.d(MyApplication.TAG, "Bringing this Activity back!"); 

    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     tabHost.setCurrentTab(extras.getInt("tabval")); 
     Log.d(MyApplication.TAG, "Switching to tab " + extras.getInt("tabval")); 
    } 
} 

我希望這有助於,有一個類似的問題有人。

+0

哇!只要在Manifest'android:launchMode =「singleTask」'中加入一行就幫了我一個忙。謝謝'Rockmaninoff'!我一直在爲此尋找一個多小時。 – sam 2017-07-21 08:16:25