2016-12-09 7 views
1

私のアプリケーションでNavigationDrawerを使用しています。ドロワーの各メニュー項目はフラグメントです。ユーザーがメニュー項目を選択すると、メインコンテナの現在のフラグメントを要求されたものに置き換えますが、毎回フラグメントを再作成します。既存のフラグメントを再利用するコードは、フラグメントの内容が同じであれば何度も繰り返し作成するのではなく、フラグメントを示すために私の更新されたコードは次のとおりです。既存のフラグメントを再作成するのではなく、FragmentManagerから再利用するにはどうすればよいですか?

public void showTabFragment() { 
     TabFragment Tf = (TabFragment) mFragmentManager.findFragmentByTag(Constants.TAB_FRAGMENT); 
     mFragmentTransaction = mFragmentManager.beginTransaction(); 
     if (Tf != null) { 
      mFragmentTransaction.replace(R.id.containerView, Tf, Constants.TAB_FRAGMENT); 
     } else { 
      mFragmentTransaction.replace(R.id.containerView, new TabFragment(), Constants.TAB_FRAGMENT); 
     } 
     mFragmentTransaction.commit(); 
    } 

上記のコードでは、私は、タグによる断片を取得しようとしていますが、それは常にnullを返し、実行し、他のケース(新しいフラグメント)を.Could誰かが私を導いてください、私は何をやっています私のコードで間違っている?

答えて

1

あなたが表示したコードは、あなたのメニューの断片の1つであると思いますか?その場合、おそらく起こっているのは、メニュー項目を開くたびに、新しいタグ(例えばTAG 'B')で新しいフラグメント(例えば、フラグメントB)に置き換えられます。したがって、あなたが置き換えたものであるため、あなたが以前のフラグメント(例えばフラグメントA)をそのタグ(TAG 'A')を使って開こうとすると、それはそこにはありません。

可能な解決策の1つは、フラグメントが作成されるときに、たとえばハッシュマップで参照を保持し、代わりにそれらを再利用することです。

private HashMap<String, Fragment> menuFragments = new HashMap<>(); 
public void showMenu(String fragmentID) 
{ 
    MenuFragment fragment = menuFragments.get(fragmentID); 
    if(fragment == null) 
    { 
     fragment = new MenuFragment(); //Create the respective menu fragment based on the ID. 
     menuFragments.put(fragmentID, fragment); 
    } 

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.containerView, fragment, fragmentID); 
    transaction.commit(); 
} 
+0

単純にグローバルオブジェクトを使用することもできます。 – NishchalAndroid

関連する問題