2010-12-10 45 views
1

問題:我有一個標籤Android應用程序,我失去塔博恩內容時,我遵循這些(當然怪)步驟:Android應用程序丟失狀態當切換標籤和定位

  1. 更改爲另一個標籤。
  2. 將風向切換爲風景。
  3. 將方向切換回肖像。
  4. 變回TabOne。

Android應用程序說明:我有與使用google's TabLayout tutorial內置三個選項卡一個漂亮的裸機Android應用程序,我們會打電話給他們塔博恩,TabTwo和TabThree。只有TabOne有任何內容:簡單的EditText視圖和Button,它允許您將文本添加到TabOne的主體。這是使用自定義ArrayAdapter來操縱的,這可能與奇怪的行爲有關。

請注意,如果我在TabOne上保留Tab方向時更改方向,則不會發生這種情況。這是因爲我實施了OnSaveInstanceState()OnRestoreInstanceState()以將我的數據列表保存在我的TabOneActivity類中。

+0

我認爲這並不奇怪。例如,Android可以通過這種方式來管理活動,例如,如果它認爲它需要釋放內存,那是因爲資源不足。如果該活動不是前臺活動(我假設您將活動用作標籤內容),則Android可以銷燬它並稍後再恢復。方向變化也一樣。如果你需要保存任何狀態,我的建議是實現OnSaveInstanceState和OnRestoreInstanceState。 – 2010-12-10 19:57:53

+0

謝謝耶穌,但我在這個活動中確實有這兩種方法。我還應該在主要活動中保存一些附加狀態嗎? – plowman 2010-12-10 20:55:28

+2

考慮從標籤中的活動切換到標籤中的意見,因爲它簡化了這種東西。例如,只有一個上下文需要保存,而不是每個標籤加一個託管活動。 – CommonsWare 2010-12-10 21:28:48

回答

1

您還需要恢復您在onCreate以及OnRestoreInstanceState中的活動狀態。

我應該指出,這種技術只適用於瞬態數據,而不適用於長期數據存儲。爲此,您應該將數據保存到數據庫中,或者存儲在中的SharedPreferences,然後檢索onResume中的數據。

4

我遇到了同樣的問題 - 我找到的解決方案是爲TabLayout onCreate中的第一個選項卡創建一個'Dummy'選項卡和活動,然後在Tab Layout Activity的onResume中隱藏'Dummy'選項卡並選擇第二個標籤以編程方式。不太好,但作爲第二個標籤的保存狀態(即第一個可見標籤)。

@Override 

protected void onResume() { 

    super.onResume(); 

    if (getTabHost() != null && getTabHost().getTabWidget()!= null) { 

     getTabHost().getTabWidget().getChildAt(0).setVisibility(View.GONE); 

     if (getTabHost().getCurrentTab() == 0) { 

      getTabHost().setCurrentTab(1); 

     } 

    } 

}