1
我有一個活動。這項活動有一個查看傳呼機。這個viewpager有五個頁面,這些頁面在其內容中打開一個片段。例如,當我在第一頁中打開兩個片段,然後在第二個頁面中打開一個片段時,就會出現問題。我回到第一頁。我點擊工具欄中的返回按鈕。我使用popBackStack()
代碼去除當前可見的碎片。 但它刪除所有的後臺堆棧。我該如何解決這個問題?popBackStack刪除所有堆棧?
getSupportFragmentManager().popBackStack(str,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
我的算法:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == android.R.id.home){
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
if(getSupportFragmentManager() != null){
int count = getSupportFragmentManager().getBackStackEntryCount();
Log.i("Fragment Stack Count : ", count+"");
if (count <= 0) {
super.onBackPressed();
} else {
checkBackStack();
}
}
}
private void checkBackStack(){
Log.i("BackStack", "Home Activity Count > 0");
FragmentManager fm= getSupportFragmentManager();
if(fm.getBackStackEntryCount() > 0){
Log.i("BackStack", "Count > 0");
for(int i = (fm.getBackStackEntryCount()-1) ; i >= 0 ; i--){
FragmentManager.BackStackEntry backStackEntry = fm.getBackStackEntryAt(i);
String str= backStackEntry.getName();
Log.i("BackStack", " Name : "+str);
BaseMenuFragment fragment= (BaseMenuFragment) fm.findFragmentByTag(str);
if(((ViewGroup) fragment.getView())!= null && ((ViewGroup) fragment.getView().getParent()) != null){
int contentId = ((ViewGroup) fragment.getView().getParent()).getId() ;
if(contentId == frames[viewPager.getCurrentItem()]){
Log.i("BackStack", "equals = true");
getSupportFragmentManager().popBackStack(str, FragmentManager.POP_BACK_STACK_INCLUSIVE);
return;
}
}
}
}
}
它是否多次輸入'if(contentId == ...)'? –
另外,什麼是'幀[]'? –
以及如果您不使用'POP_BACK_STACK_INCLUSIVE'會發生什麼? –