我有一個容器的主要活動,我想顯示四個片段。這個主要活動有一個底欄,當我按下一個特定的選項卡時,它應該會膨脹不同的片段。我正在嘗試使用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);
}
}
很多感謝的工作
嘗試編輯您的問題,並重新措辭一些單詞和標題正確 – Pulkit