2016-09-25 10 views
8

私は自分のFragmentにカスタムキーボードを追加しました。私はpublic void onActivityCreated(final Bundle savedInstanceState)BackStackEntryをBackStackに追加する方法

fragmentPopped=falseに毎回CustomKeyboardを作成するためCustomKeyboardが複数回BackStackするために添加することができるよう

class CustomKeyboard 
{ 
    public void init(Context context) { 
     //... 

     FragmentManager fragmentManager = ((Activity) context).getFragmentManager(); 
     boolean fragmentPopped = fragmentManager.popBackStackImmediate(TAG, 0); 
     if (!fragmentPopped) { 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.addToBackStack(TAG); 
      fragmentTransaction.commit(); 
     } 
    } 
} 

問題は、initコール画面が回転するたびにあります。

私の質問:
getBackStackEntryCount()メソッドを使用せずに存在していない場合はBackStackにBackStackEntryを追加することが可能ですか?

+0

https://developer.android.com/ reference/android/app/FragmentManager.html#POP_BACK_STACK_INCLUSIVE –

+0

あなたの質問に直接回答したい場合や、複数の通話の問題を解決したい場合は、 – Elltz

+0

@Elltz私の質問に直接答えたい –

答えて

2

次のコードを更新してみてください。

public void init(Context context) { 

    FragmentManager fragmentManager = ((Activity) context).getFragmentManager(); 
    boolean fragmentPopped = fragmentManager.popBackStack(TAG, 0); 
    if (!fragmentPopped) { 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.addToBackStack(TAG); 
     fragmentTransaction.commit(); 
    } 
} 
2

希望あなたが

@Override 
public void replaceFragment (Fragment fragment, String backStackTag){ 
    AppAndroidUtils.hideKeyboard(this); 

    if(StringUtils.isEmpty(backStackTag)) 
     backStackTag = fragment.getClass().getName(); 
    FragmentManager manager = getSupportFragmentManager(); 
    boolean fragmentPopped = manager.popBackStackImmediate(backStackTag, 0); 

    if (!fragmentPopped && manager.findFragmentByTag(backStackTag) == null){ 
     FragmentTransaction ft = manager.beginTransaction(); 
     ft.replace(R.id.frame_container, fragment, backStackTag); 
     ft.addToBackStack(backStackTag); 
     ft.commit(); 
    } 

} 
2

あなたはこのような何かを行うことができ、このコードのヘルプ:

また
 FragmentManager fm= getSupportFragmentManager(); 

    if(fm!=null && getSupportFragmentManager().getFragments()!=null) { 

     boolean fragmentPopped = fm.popBackStackImmediate(TAG, 0); 

     if (!fragmentPopped && getSupportFragmentManager().getFragments().size() == 0) { 

      FragmentTransaction ft = fm.beginTransaction(); 
      ft.addToBackStack(TAG); 
      ft.commit(); 
     } 
    } 

あなたは、このように最初にあなたのBackstackをきれいにしてからの断片を置き換えることができます。

private void cleanBackStack() { 
    FragmentManager fm = getSupportFragmentManager(); 
    if (fm != null && fm.getFragments() != null) { 
     if (fm.getFragments().size() > 1) { 

      for (int entry = 0; entry < fm.getFragments().size(); entry++) { 
       fm.popBackStackImmediate(); 
      } 
     } else if (fm.getFragments().size()==1){ 

      fm.popBackStack(); 
     }else if(fm.getFragments().size()==0){ 
       //REPLACE YOUR FRAGMENT 
     } 
    } 
} 
関連する問題