我正在开发一个包含大量片段的Android应用程序。但我在他们之间切换时遇到了问题。
假设我有一个片段A现在我想去片段B,因为我这样做 -
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager
.beginTransaction();
Fragment fragment = new Fragment_B();
transaction.add(R.id.frameLayout, fragment);
transaction.addToBackStack(null);
transaction.commit();
我成功到达片段B.现在我必须从这里去片段C,为此我再次做同样的事情。
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager
.beginTransaction();
Fragment fragment = new Fragment_C();
transaction.add(R.id.frameLayot, fragment);
transaction.addToBackStack(null);
transaction.commit();
我也成功地做到了这一点。现在我必须回到片段B,为此我做 -
getFragmentManager.popbackstack();
这让我回到片段B.但是当我现在这样做去片段A时,它会导致NullpointerException。
我在这里做错了什么。为什么这是第一次完美运行但第二次失败?请帮忙。
答案 0 :(得分:2)
我认为你必须首先检查后台堆栈中是否有碎片可用。请按照我的以下代码:
if(manager.getBackStackEntryCount()>0){
manager.popBackStack();
manager.beginTransaction().commit();
}
多数民众赞成......
并且是的,你最初不会将片段a添加到backstack,所以交叉检查..
答案 1 :(得分:1)
fragmentTransaction.addToBackStack("tag");
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 1) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}