onBackPressed上的Android片段NullPointerException

时间:2012-08-22 12:24:45

标签: android nullpointerexception fragment back-button

美好的一天。

我有一个应用程序,其中一个主要活动包含3个容器。每个容器都有一个“注入”的片段。在开始此主要活动时,强制显示第一个容器和片段,并隐藏其他两个。单击按钮时,应用程序将移动到另一个容器,其中包含另一个片段,依此类推。

这样可行,它会向前移动到最后一个容器,然后向后转到第一个带有android后退按钮的容器。

问题是,如果我停在第二个片段,并且我尝试回到第一个片段,而没有激活第三个片段,应用程序崩溃并出现以下错误:

 java.lang.NullPointerException at
 pl.oke.arshop.activities.ARShopActivity.onBackPressed(ARShopActivity.java:155)
 at android.app.Activity.onKeyUp(Activity.java:1895) at
 android.view.KeyEvent.dispatch(KeyEvent.java:1281) at
 android.app.Activity.dispatchKeyEvent(Activity.java:2075) at
 android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2463) at
 android.view.ViewRoot.handleMessage(ViewRoot.java:1752) ... etc

其中ARShopActivity.java:155是:

@Override
    public void onBackPressed() {

        if (isVirtualRoomOpened) {
            isVirtualRoomOpened = false;
            showFurnitureFragments();
        } else if (isFurnitureFragmentOpened) {
            isFurnitureFragmentOpened = false;
            showMainFragment();
        }

        super.onBackPressed();
        Log.d("Dab", " " + isVirtualRoomOpened + " "
                + isFurnitureFragmentOpened + " " + isMainFragmentOpened);

    }
}

有什么想法?谢谢。

1 个答案:

答案 0 :(得分:0)

啊,errare humanum est,isVirtualRoomOpened变量在创建最后一个片段时被初始化,所以当我尝试从第二个片段跳回到第一个片段时,第一个条件的参数为null。

将关于片段的所有布尔变量设置为“false”解决了问题。