在 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() 代替
我的代码中有这一行:
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() 代替