2017-09-06 5 views
0

私は、4つの断片を表示したい1つの容器で主な活動をしています。この主なアクティビティには、特定のタブを1つ押すと別のフラグメントが膨張するボトムバーがあります。バックスラックコールを使用してアプリをより流動的にするようにしています。コード怒鳴るが、その下のバーバックスラックから手を出す

@Override 
    public void onTabSelected(@IdRes int tabId) { 

    if (tabId == R.id.tab_people) { 
     cretePeopleFrgament(); 
    } else if (...) { 
       ... 
    } 

    bottomBar.setOnTabReselectListener(new OnTabReselectListener() { 
     @Override 
     public void onTabReSelected(@IdRes int tabId) { 
      if (tabId == R.id.tab_people) { 
       cretePeopleFrgament(); 
      } else if (...) { 
       ... 
      } 
     } 
    }); 
} 

ためlistennersを示して私が膨張するようにしたいのフラグメントがすでにオンになっている場合、私がしようとしています、次の方法でだから

void creteProfileFrgament() { 
     ...  
     Fragment fraggy = new FragmentProfile(); 
     replaceFragment(fraggy,"Profile",null); 

    } 

ように私のフラグメントを開始します彼がポップされていて、作成されていなければならない場合は、バックスタック。そして、何が起きているのかは、バックスタックからポップが必要なときにonStartから渡されるフラグメントを常に生成することです。私debbugから、私はすでに彼が正しく追加ことがわかり、ブールfragmentpopは

private void replaceFragment (Fragment fragment, String name,Bundle bundle){ 
    boolean fragmentPopped = fragmentManager.popBackStackImmediate(name,0); 
if (!fragmentPopped){ //fragment not in back stack, create it. 
    FragmentTransaction ft= fragmentManager.beginTransaction(); 
    ft.addToBackStack(name); 
    ft.replace(R.id.conteiner, fragment); 
    if(bundle!=null) 
     fragment.setArguments(bundle); 
    ft.commit(); 
} 

} 

を真camesが、そのpopedないこれの目的は、onBackPressed

@Override 
    public void onBackPressed() { 
     bottomBar.setVisibility(View.VISIBLE); 
     int index = fragmentManager.getBackStackEntryCount() - 1; 
     String tag; 
     if(index==-1) { 
      tag = "default"; 
     }else { 
      FragmentManager.BackStackEntry backEntry = fragmentManager.getBackStackEntryAt(index); 
      tag = backEntry.getName(); 
     } 
     switch (tag){ 
      case "Profile": 
       bottomBar.selectTabAtPosition(0); 
       break; 
      case "People": 
       bottomBar.selectTabAtPosition(1); 
       break; 
      case "default": 
       bottomBar.selectTabAtPosition(0); 
     } 

    } 

おかげ

+0

質問を編集していくつかの単語とタイトルを正しく表現してください – Pulkit

答えて

0
の多くの作品です

バックグラウンドからポップする場合は、毎回新しいフラグメントを作成しています。バックスタックからポップしたい場合は、再度作成せずに保持する必要があります。

あなたのcretePrを見るofileFrgament mehtod。

+0

新しいフラグメントを作成すると、それはonStartメソッドから始まりますか?私の問題を解決するにはどうすればいいですか?ありがとう – Dariko77

+0

fragmentTransaction.addToBackStack( "name"); 後で必要なときに: FragmentManager fm = getActivity() .getSupportFragmentManager(); fm.popBackStack( "name"、FragmentManager.POP_BACK_STACK_INCLUSIVE); – himel

関連する問題