5

フラグメントのリストを呼び出しているところから HomeActivity が 1 つあります。HomeActivity には、すべてのフラグメントがロードされるサイドメニューがあります。

さて、このリストには HomeFragment と呼ばれる 1 つのフラグメントがあり、Web サービスを使用して Google マップをデータとともに表示します。

私が欲しいのは、サイドメニューをクリックしたり、他のフラグメントから入ってきたりするたびにではなく、フラグメントがロードされるのは一度だけ(初めて)マップデータをロードしたいということです。

My HomeFragment またはその他のフラグメントは、毎回ではなく一度に読み込まれます。

4

2 に答える 2

9

フラグメントを非表示/表示できます。取り替える必要はありません。たとえば、FragmentFeed と FragmentNotification の 2 つのフラグメントがあり、フラグメントを非表示/表示または追加できます。

クリック メニューの処理:

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();
    }
于 2017-02-24T09:56:57.020 に答える
0

2つのものを使用する必要があります。

Fragment の最初の onSavedInstance。必要な情報を入力してください。

2 番目の setRetainState(true)。これにより、フラグメントが切り離されていても、フラグメントが破壊されるのを防ぐことができます。お役に立てれば。

于 2017-02-24T09:25:44.760 に答える