片段事务 .replace() 方法抛出空对象引用



我有一个程序,其默认 UI 是带有TabLayoutViewPagerMainActivityCoordinatorLayout.ViewpagerAppBarLayoutTabLayout都包装在一个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' on a null 对象 参考

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

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

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

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

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

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

相关内容

最新更新