2017-09-06 84 views
0

我有一個容器的主要活動,我想顯示四個片段。這個主要活動有一個底欄,當我按下一個特定的選項卡時,它應該會膨脹不同的片段。我正在嘗試使用backstack調用來使我的應用更加流暢。該代碼波紋管顯示爲底欄listenners不能從後臺堆棧

@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 (...) { 
       ... 
      } 
     } 
    }); 
} 

我開始了我的片段像

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

    } 

所以下一個方法我想,如果我想吹大片段已經在如果是這樣的話,他應該被強制而不是被創造出來。發生的事情是,當我想從後臺堆棧彈出時,總是會生成從onStart傳遞的片段。從我debbug我已經看到他正確添加,布爾fragmentpop卡梅斯真實的,但它不是POP操作

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(); 
} 

} 

這樣做的目的是與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

你每次創建一個新的Fragment,如果你想從後臺彈出,你應該保留它,而不是再次創建它...

看着你的cretePr ofileFrgament mehtod。

+0

因此,當我創建一個新的片段它開始onStart方法?我該如何解決我的問題?謝謝 – Dariko77

+0

fragmentTransaction.addToBackStack(「name」); 當你需要時: FragmentManager fm = getActivity() .getSupportFragmentManager(); fm.popBackStack(「name」,FragmentManager.POP_BACK_STACK_INCLUSIVE); – himel