2017-02-24 8 views
4

私は1つのHomeActivityがどこからフラグメントのリストを呼んでいるかを知っています。 HomeActivityには、すべてのフラグメントがロードされるサイドメニューがあります。フラグメント状態をアンドロイドに保存する方法は?

ここでは、私はHomeFragmentという1つのフラグメントを持っており、webserviceを使ってGoogle Mapをデータとともに表示しています。

私が望むのは、Mapデータをロードするときは、一度だけ(初めて)フラグメントがロードされ、いつもサイドメニューをクリックしたり、他のフラグメントから入ったりする必要はありません。

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

+1

あなたがロードするための – EpicPandaForce

+0

など、代わりにデタッチの表示/非表示のフラグメントトランザクションを使用し、取り外し、交換する必要がありますアクティビティが再作成された場合でも保存することができます。これは、AsyncTaskLoaderなどのローダーを使用して行うことができます。ここでは、その使用例を示します。http://stackoverflow.com/a/22675607/878126 –

答えて

6

フラグメントを非表示にすることができます。交換する必要はありません。例として、私は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(); 
    } 
+0

@RoShan Shanありがとうございます。それは私のために働いています。それは私の数時間を節約します。 –

0

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

あなたのフラグメントの最初の保存されたインスタンス。 必要な情報を入力してください。

2番目のsetRetainState(true)。これにより、フラグメントが切り離されても破壊されないようにします。お役に立てれば。

関連する問題