2014-04-07 26 views
2

分段丟失狀態,如果閒置20分鐘,則顯示空UI。我正在使用FragmentStatePagerAdapter,我試着在我的FragmentActivity的onStart()中調用notifyDataSetChanged設備空閒時分段狀態丟失

請幫助我如何保存我的片段的對象和狀態,並在重新加載應用程序時重用它。

回答

0

如果沒有您的代碼,很難回答。

但是我可以說,國家是由savedInstanceState

通常在通常儲存在onActivityCreated您有類似以下內容。在我給出的例子中,我保存了輸入或不輸入文本的布爾值。

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    if (savedInstanceState != null) { 
     mHasText = savedInstanceState.getBoolean(HAS_TEXT_TAG); 
    } else { 
     // do something 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putBoolean(HAS_TEXT_TAG, mHasText); 
} 

這只是一個例子因爲沒有你的代碼很難ANWER

3

的Android可以殺死你的應用程序如果需要的話,你需要使用onSaveInstanceState保持你的狀態,在此情況下。 (記住:在onPause保存重要數據)

onSaveInstanceState存在於活動和片段,並以同樣的方式使用類似的活動現在

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("integer", anInteger); 
} 

onCreateonCreateViewonActivityCreated你有這樣的說法BundlesavedInstanceState這相當於保存的包裹。 (檢查是否是空了。)


如果沒有,也許足夠多的Android殺了你FragmentManager,所以你需要重寫你的活動onSaveInstanceStateonRetoreInstanceState和恢復片段。

也許這個答案可以幫助你的最後一件事,我說:Using onSaveInstanceState with fragments in backstack?

+0

+1對於比我的更多解釋的答案。你應該添加如何檢查onSaveInstanceState的示例!= null – HpTerm

0

一個Fragment的生命週期緊密相關Activity的生命週期。這意味着,當你的Activity空閒時,它會殺掉任何包含的Fragments。要存儲Fragments,您可以始終保留它們,以便與Fragment API一致。這意味着你通常會在後臺使用片段。然而,防止Activity結束被破壞或丟失的最佳方式是將相關信息存儲在自定義對象中,然後在Activity恢復時重新創建Fragment

例如;我可以有一個自定義對象,可以爲我的Fragment存儲相關的UI值,當我的Activity空閒或更改時,我會將這些相關值保存到我創建的自定義對象中。然後,當創建新的Activity;或我的舊Activity恢復;我會檢索這些值並將它們放回到我的Fragment的用戶界面中。希望這有助於:)

+0

正如我在我的問題中提到的,我已經在我的片段活動的onStart方法中調用了視圖尋呼機適配器的notifydatasetchanged,但不幸的是它尚未解決我的問題。我設計了適配器,以便在調用notifydatasetchanged時使用早期對象時不會重新創建片段對象。你認爲我也應該在我的片段上調用refresh ui方法嗎? – user3506878

0

如果android需要內存,它會殺死正在運行的應用程序。所以你必須使用

public void onSaveInstanceState(Bundle savedState) {} 

注意保存對象savedState必須可序列化。

您必須在onResume()中調用notifyDataSetChanged(),因爲它確保在活動恢復時調用它。

有關詳細的答案,請張貼您的代碼。