分段丟失狀態,如果閒置20分鐘,則顯示空UI。我正在使用FragmentStatePagerAdapter
,我試着在我的FragmentActivity的onStart()
中調用notifyDataSetChanged
。設備空閒時分段狀態丟失
請幫助我如何保存我的片段的對象和狀態,並在重新加載應用程序時重用它。
分段丟失狀態,如果閒置20分鐘,則顯示空UI。我正在使用FragmentStatePagerAdapter
,我試着在我的FragmentActivity的onStart()
中調用notifyDataSetChanged
。設備空閒時分段狀態丟失
請幫助我如何保存我的片段的對象和狀態,並在重新加載應用程序時重用它。
如果沒有您的代碼,很難回答。
但是我可以說,國家是由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
的Android可以殺死你的應用程序如果需要的話,你需要使用onSaveInstanceState
保持你的狀態,在此情況下。 (記住:在onPause
保存重要數據)
onSaveInstanceState
存在於活動和片段,並以同樣的方式使用類似的活動現在
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("integer", anInteger);
}
在onCreate
,onCreateView
或onActivityCreated
你有這樣的說法Bundle
savedInstanceState
這相當於保存的包裹。 (檢查是否是空了。)
如果沒有,也許足夠多的Android殺了你FragmentManager
,所以你需要重寫你的活動onSaveInstanceState
和onRetoreInstanceState
和恢復片段。
也許這個答案可以幫助你的最後一件事,我說:Using onSaveInstanceState with fragments in backstack?
一個Fragment
的生命週期緊密相關Activity
的生命週期。這意味着,當你的Activity
空閒時,它會殺掉任何包含的Fragments
。要存儲Fragments
,您可以始終保留它們,以便與Fragment API一致。這意味着你通常會在後臺使用片段。然而,防止Activity
結束被破壞或丟失的最佳方式是將相關信息存儲在自定義對象中,然後在Activity
恢復時重新創建Fragment
。
例如;我可以有一個自定義對象,可以爲我的Fragment
存儲相關的UI值,當我的Activity
空閒或更改時,我會將這些相關值保存到我創建的自定義對象中。然後,當創建新的Activity
;或我的舊Activity
恢復;我會檢索這些值並將它們放回到我的Fragment
的用戶界面中。希望這有助於:)
正如我在我的問題中提到的,我已經在我的片段活動的onStart方法中調用了視圖尋呼機適配器的notifydatasetchanged,但不幸的是它尚未解決我的問題。我設計了適配器,以便在調用notifydatasetchanged時使用早期對象時不會重新創建片段對象。你認爲我也應該在我的片段上調用refresh ui方法嗎? – user3506878
如果android需要內存,它會殺死正在運行的應用程序。所以你必須使用
public void onSaveInstanceState(Bundle savedState) {}
注意保存對象savedState必須可序列化。
您必須在onResume()中調用notifyDataSetChanged(),因爲它確保在活動恢復時調用它。
有關詳細的答案,請張貼您的代碼。
+1對於比我的更多解釋的答案。你應該添加如何檢查onSaveInstanceState的示例!= null – HpTerm