我有一个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 –