我有一個HomeActivity從我打電話給片段列表。在HomeActivity中,我有sidemenu所有片段加載。如何在android中保存片段狀態?
現在,在這個名單上有所謂的HomeFragment一個片段,它與數據顯示谷歌地圖,使用web服務。
我想什麼是我想要加載地圖DAT只有一次(第一次)片段被加載,而不是每次當點擊sidemenu或任何其他碎片進入。
我HomeFragment或任何其他片段一次加載,而不是每一次。
我有一個HomeActivity從我打電話給片段列表。在HomeActivity中,我有sidemenu所有片段加載。如何在android中保存片段狀態?
現在,在這個名單上有所謂的HomeFragment一個片段,它與數據顯示谷歌地圖,使用web服務。
我想什麼是我想要加載地圖DAT只有一次(第一次)片段被加載,而不是每次當點擊sidemenu或任何其他碎片進入。
我HomeFragment或任何其他片段一次加載,而不是每一次。
您可以隱藏/顯示片段。無需更換,刪除。例如,我有2個片段FragmentFeed和FragmentNotification,我們可以隱藏/顯示或添加片段。
手柄點擊菜單:
if (tabId.equals(AppConstants.FEED)) {
pushFragments(tabId, getFragmentFeed());
} else if (tabId.equals(AppConstants.NOTIFICATION)) {
pushFragments(tabId, getFragmentNotification());
}
手柄顯示/隱藏,並添加片段:
public void pushFragments(String tag, Fragment fragment) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
if (manager.findFragmentByTag(tag) == null) {
ft.add(R.id.realtabcontent, fragment, tag);
}
Fragment fragmentFeed = manager.findFragmentByTag(TAG_FEED);
Fragment fragmentNoti = manager.findFragmentByTag(TAG_NOTIFICATION);
// Hide all Fragment
if (fragmentFeed != null) {
ft.hide(fragmentFeed);
}
if (fragmentNoti != null) {
ft.hide(fragmentNoti);
}
// Show current Fragment
if (tag == TAG_FEED) {
if (fragmentFeed != null) {
ft.show(fragmentFeed);
}
}
if (tag == TAG_NOTIFICATION) {
if (fragmentNoti != null) {
ft.show(fragmentNoti);
}
}
ft.commitAllowingStateLoss();
}
謝謝@羅珊珊。它爲我工作。這節省了我的幾個小時。 –
你應該使用兩件事。您的片段的
首先onSavedInstance。 填寫您想要的信息。
第二個setRetainState(true)。這將防止你的碎片即使被分離也不會被銷燬。希望這可以幫助。
您需要使用隱藏/顯示片段的交易,而不是分離,拆卸,更換等 – EpicPandaForce
對於裝載數據並保存它們,即使重新創建活動時,也可以通過加載程序(如AsyncTaskLoader)完成此操作。以下是如何使用它的示例:http://stackoverflow.com/a/22675607/878126 –