【发布时间】:2017-03-17 04:57:22
【问题描述】:
我有一个程序,其默认 UI 是 ViewPager 和 TabLayout。 MainActivity 是 CoordinatorLayout。 Viewpager、AppBarLayout 和 TabLayout 都包含在 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中还没有Fragment,findFragmentById(R.id.container)将返回 null,而remove()调用将抛出该异常。此外,FragmentTransactions 仅适用于Fragments,因此remove()调用不会对您的ViewPager、AppBarLayout等产生任何影响,除非它们是Fragment的一部分的View。 -
您的
fm定义在哪里? -
fm 在主活动的 onCreate() 方法中定义。 Mike M,你是对的,findFragmentById() 正在返回 null。我正在修复。
标签: android android-fragments interface