【问题标题】:Fragment Transaction .replace() method throwing null object referenceFragment Transaction .replace() 方法抛出空对象引用
【发布时间】:2017-03-17 04:57:22
【问题描述】:

我有一个程序,其默认 UI 是 ViewPagerTabLayoutMainActivityCoordinatorLayoutViewpagerAppBarLayoutTabLayout 都包含在 RelativeLayout 中,我打算将其用作将主 UI 换成不同视图的容器。

ViewPager 视图之一中托管的是一个按钮。此按钮通过名为HelperLinkerListener 的接口与MainActivity 通信,MainActivity 实现了该接口。我知道接口连接正确,因为我已经通过 logcat 对其进行了测试。

我希望 喜欢 让按钮将我的包装器 RelativeLayout 换成新片段。以下是我onHelperLinkerClick()的当前内容:

    Fragment fragment = new GsonPlaceholder();
    Bundle bundle = new Bundle();
    bundle.putParcelable("char",charGson);
    fragment.setArguments(bundle);
    Log.d("logtest", "onHelperLinkerClick: " + bundle.getParcelable("char"));
    FragmentTransaction ft = fm.beginTransaction();
    ft.remove(getSupportFragmentManager().findFragmentById(R.id.container));
    ft.commit();

这里,charGson 是一个正确定义的实现 Parcelable 的类。线

    ft.remove(getSupportFragmentManager().findFragmentById(R.id.container));

抛出如下空指针异常:

java.lang.NullPointerException: 尝试从字段 'int 读取 android.support.v4.app.Fragment.mContainerId' 在一个空对象上 参考

我不清楚如何解决这个问题。有什么想法吗?

【问题讨论】:

  • 如果container 中还没有FragmentfindFragmentById(R.id.container) 将返回 null,而 remove() 调用将抛出该异常。此外,FragmentTransactions 仅适用于 Fragments,因此 remove() 调用不会对您的 ViewPagerAppBarLayout 等产生任何影响,除非它们是 Fragment 的一部分的View
  • 您的fm 定义在哪里?
  • fm 在主活动的 onCreate() 方法中定义。 Mike M,你是对的,findFragmentById() 正在返回 null。我正在修复。

标签: android android-fragments interface


【解决方案1】:

只需尝试使用getSupportFragmentManager() 更改 fm 所以它会变成

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

【讨论】:

  • fm 不为空;那部分正在工作。 Mike M. 上面的评论让我走上了正确的道路 - 当我有更好的答案时,我会更新。
  • 如果我错了请纠正我.. 所以你想交换buttonClick 上的fragmentfragments 被添加到ViewPager 中?
【解决方案2】:

在我的情况下,在尝试删除 null 的片段时引发了完全相同的异常。您可以插入代码

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction().remove(null).commit();

并查看您的错误日志。问题是异常不会在这个字符串上抛出,而是稍后在 Android 源代码中的某个地方抛出,您看不到哪个代码字符串是异常的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2018-06-14
    相关资源
    最近更新 更多