我有一个程序,其默认 UI 是带有TabLayout
的ViewPager
。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' on a null 对象 参考
我不清楚如何解决这个问题。 有什么想法吗?
只需尝试使用getSupportFragmentManager()
更改FM 所以它会变成
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
在我的情况下,在尝试删除null
片段时抛出了完全相同的异常。您可以插入代码
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction().remove(null).commit();
并查看您的错误日志。问题是异常不会在此字符串上抛出,而是稍后在 Android 源代码中的某个地方抛出,并且您看不到哪个代码字符串是异常的原因。