2016-05-02 4 views
0

2つのフラグメント(1,2)があります。 ボタンをクリックすると(フラグメント1)トランジションが起こります(フラグメント2)。ボタンがクリックされると(フラグメント2).now(new_activity)に行きます.my問題は私が(new_activity)から戻るときです。 (フラグメント2)&に戻って(フラグメント1)、addTOBackStackにフラグメント1を直接追加することはできません(フラグメント2)。新しいアクティビティに進むと2番目のフラグメントの状態を保存できません

// method to handle click event of category 
public void onClick(View v) { 

    FragmentManager fragmentManager = getActivity() 
      .getSupportFragmentManager(); 
    FragmentTransaction ft = fragmentManager.beginTransaction(); 

    Bundle bundle = new Bundle(); 
    int categoryId; 
    CategoryFragment a = new CategoryFragment(); 

    Log.d("HomeFragment", v.getId() + ""); 

    switch (v.getId()) { 
    case R.id.image_american_chiffon: 
     categoryId = 1; 
     bundle.putInt("categoryId", categoryId); 

     a.setArguments(bundle); 
     ft.replace(R.id.contentFrame, a); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     ft.addToBackStack(null); 

     break; 
    case R.id.image_nagma: 
     categoryId = 2; 
     bundle.putInt("categoryId", categoryId); 

     a.setArguments(bundle); 
     ft.replace(R.id.contentFrame, a); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     ft.addToBackStack(null); 
     break; 

    } 
    ft.commit(); 
    Log.e("BACK STACK COUNT",fragmentManager.getBackStackEntryCount()+""); 
} 

答えて

0

あなたがメソッドを置き換える呼び出す毎回、そのフラグメントの新しいオブジェクトが「created.Youが隠された状態に最初に必要なすべての断片を追加し、ちょうどあなたがドン示し、あなたのneed.soに応じて非表示にすることができますされています毎回初期化する必要があり、必要なフラグメントを表示し、他のフラグメントを隠す必要があります。

次のように行い、初めにフラグメントを追加するには:ちょうど所望のフラグメント

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.show(getFragmentManager().findFragmentByTag(fragmentTagToBeShown)); 
    transaction.hide(getFragmentManager().findFragmentByTag(currentFragmentTag)); 
    transaction.commit(); 
を隠し、表示し、

Fragment myFragment = new CategoryFragment(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.add(R.id.fragmentContainer, myFragment, SOME_TAG); 
    transaction.hide(myFragment); 
    transaction.commit(); 

との代わりに()メソッドを呼び出して置き換えます

関連する問題