【问题标题】:getFragmentManager().popbackstack() causing nullpointer exceptiongetFragmentManager().popbackstack() 导致空指针异常
【发布时间】:2014-08-02 20:48:33
【问题描述】:

我正在开发一个包含很多片段的安卓应用。但是我在它们之间切换时遇到了问题。

假设我有一个片段 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();

我成功到达 Fragment B。现在我必须从这里前往 Fragment C,为此我又在做同样的事情。

FragmentManager manager = getFragmentManager();
                        FragmentTransaction transaction = manager
                                .beginTransaction();
                        Fragment fragment = new Fragment_C();                   
                        transaction.add(R.id.frameLayot, fragment);
                        transaction.addToBackStack(null);
                        transaction.commit();

我也成功地做到了。现在我必须回到 Fragment B,为此我要做 -

getFragmentManager.popbackstack();

这让我回到了 Fragment B。但是当我现在做同样的事情去 Fragment A 时,它会导致 NullpointerException。

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

【问题讨论】:

    标签: android android-fragments nullpointerexception back-stack


    【解决方案1】:

    我认为您必须首先检查 backstack 中是否有可用的片段。按照我下面的代码:

    if(manager.getBackStackEntryCount()>0){
        manager.popBackStack();
        manager.beginTransaction().commit();
    }
    

    就是这样……

    是的,你最初并没有将片段 a 添加到 backstack,所以交叉检查..

    【讨论】:

    • 我的 Fragment Activity 先启动(添加)一个 PagerFragment(即在其 onCreate 中)。此寻呼机片段中有 3 个片段。片段 A 是这三个中的第一个。片段 B 和 C 不在这个 pagerfragment 中,完全不同。
    • 好的,那么当您的寻呼机活动添加与 Fragment B 相同的 Fragment A 时,您必须编写 transaction.addToBackStack(null);就是这样……
    【解决方案2】:
    fragmentTransaction.addToBackStack("tag");
    
    
    
    @Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 1) {
            getFragmentManager().popBackStack();
        } else {
            super.onBackPressed();
        }
     }
    

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多