如何在 android 中保存片段状态?

How to save fragment state in android?

我有一个 HomeActivity,我从那里调用片段列表。在 HomeActivity 中,我有加载所有片段的侧边菜单。

现在,在这个列表中,我有一个名为 HomeFragment 的片段,它使用 web 服务显示 Google 带有数据的地图。

我想要的是我只想加载地图数据一次(第一次)加载片段,而不是每次单击侧边菜单或从任何其他片段进入时。

我的 HomeFragment 或任何其他片段都是一次加载,而不是每次都加载。

你应该使用两个东西。

您的片段的第一个 onSavedInstance。 填写你想要的信息。

第二个 setRetainState(true)。这将防止您的片段被破坏,即使它是分离的。希望这有帮助。

您可以hide/show片段。无需更换、拆卸。例如,我有 2 个片段 FragmentFeed 和 FragmentNotification,我们可以 hide/show 或添加片段。

处理点击菜单:

if (tabId.equals(AppConstants.FEED)) {
                    pushFragments(tabId, getFragmentFeed());
                } else if (tabId.equals(AppConstants.NOTIFICATION)) {
                    pushFragments(tabId, getFragmentNotification());
                }

处理show/hide并添加片段:

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();
    }