【问题标题】:getHandler() NullPointerException when calling popBackstackImmediate() on a FragmentManager在 FragmentManager 上调用 popBackstackImmediate() 时出现 getHandler() NullPointerException
【发布时间】:2016-07-27 14:24:29
【问题描述】:

我的代码中有这一行:

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$1.onClick(MyOtherFragment.java:189)

知道哪里有问题吗?

【问题讨论】:

  • 你读过this
  • 我做了,但看起来那里没有解决方案。我希望这里有人找到解决方案。

标签: android android-fragments fragmentmanager


【解决方案1】:

原来我的代码有错误。

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

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

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

【讨论】:

  • 对我来说,这是由于错误的超级方法调用而发生的。被覆盖的 onStop() 方法以某种方式调用 super.onDestroy() 并将其更改为 super.onStop() 修复了它。
【解决方案2】:

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

只需注释 super() 方法并改为 finish()

【讨论】:

    猜你喜欢
    • 2018-05-22
    • 2023-03-31
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2015-02-13
    • 2012-01-21
    • 2012-08-29
    相关资源
    最近更新 更多