onBackPressed 上的 Android 片段 NullPointerException

Posted

技术标签:

【中文标题】onBackPressed 上的 Android 片段 NullPointerException【英文标题】:Android fragment NullPointerException on onBackPressed 【发布时间】:2012-08-17 20:59:37 【问题描述】:

美好的一天。

我有一个应用程序,它有一个包含 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】:

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

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

【讨论】:

以上是关于onBackPressed 上的 Android 片段 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

android检测返回键onBackPressed和onKeyDown区别

Android中onBackPressed()的使用

android 12 onBackPressed

Android 重写onBackPressed()方法 不执行问题

在单个活动 android 应用程序中管理 onBackPressed

getElementById 包含“abc”android onbackpressed