我有一个 HomeActivity 从中调用片段列表。在 HomeActivity 我有加载所有片段的侧边菜单。
现在,在这个列表中,我有一个名为 HomeFragment 的片段,它使用 web 服务显示带有数据的谷歌地图。
我想要的是我只想加载一次(第一次)片段加载的地图数据,而不是每次单击侧面菜单或从任何其他片段进入时。
我的 HomeFragment 或任何其他片段一次加载,而不是每次加载。
我有一个 HomeActivity 从中调用片段列表。在 HomeActivity 我有加载所有片段的侧边菜单。
现在,在这个列表中,我有一个名为 HomeFragment 的片段,它使用 web 服务显示带有数据的谷歌地图。
我想要的是我只想加载一次(第一次)片段加载的地图数据,而不是每次单击侧面菜单或从任何其他片段进入时。
我的 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();
}
你应该使用两件事。
您的 Fragment 的第一个 onSavedInstance。填写您想要的信息。
第二个 setRetainState(true)。这将防止您的片段被破坏,即使它已分离。希望这可以帮助。