在 FragmentManager 上调用 popBackstackImmediate() 时出现 getHandler() NullPointerException

getHandler() NullPointerException when calling popBackstackImmediate() on a FragmentManager

我的代码中有这一行:

getChildFragmentManager().popBackstackImmediate();

有时可以,但经常崩溃。这是堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' on a null object reference
          at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1646)
          at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:585)
          at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:600)
          at marg.uk.fourthoffice.fragments.BCMasterDetailFragment.popBackStack(MyMasterDetailFragment.java:140)
          at marg.uk.fourthoffice.activities.BCOfficeActivity.onBackPressed(MainActivity.java:173)
          at marg.uk.fourthoffice.fragments.BCSwipeableCardsFragment.onClick(MyOtherFragment.java:189)

知道哪里有问题吗?

原来是我的代码出错了。

我无法展示示例,因为我的 Activity-Fragment 架构存在很多问题,但主要问题是 getChildFragmentManager 实际上是空的,它是从错误的片段中调用的。

这发生在平板电脑(双面板布局)上,其中有 4 个以上的片段同时处于活动状态。这是在错误的片段上调用的。

因此,如果您遇到类似问题,可能是因为内存中存在同一片段的多个实例。确保您从正确的实例调用此方法。

@Override
public void onBackPressed() {
//     super.onBackPressed();
       finish();
}  

只需注释 super() 方法并编写 finish() 代替