getFragmentManager()。popbackstack()导致nullpointer异常

时间:2014-06-12 13:38:06

标签: android android-fragments nullpointerexception back-stack

我正在开发一个包含大量片段的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。

我在这里做错了什么。为什么这是第一次完美运行但第二次失败?请帮忙。

2 个答案:

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