Android 引发空对象引用的片段事务.replace()方法
我有一个程序,它的默认用户界面是一个带有Android 引发空对象引用的片段事务.replace()方法,android,android-fragments,interface,Android,Android Fragments,Interface,我有一个程序,它的默认用户界面是一个带有表格布局的ViewPager。main活动是一个协调布局。Viewpager、AppBarLayout和TabLayout都包装在一个RelativeLayout中,我打算将它用作一个容器,用于将主UI换成不同的视图 其中一个ViewPager视图中有一个按钮。此按钮通过名为HelperLinkerListener的接口与MainActivity进行通信,该接口由MainActivity实现。我知道接口接线正确,因为我已经通过logcat对其进行了测试 我
表格布局的ViewPager
。main活动
是一个协调布局
。Viewpager
、AppBarLayout
和TabLayout
都包装在一个RelativeLayout
中,我打算将它用作一个容器,用于将主UI换成不同的视图
其中一个ViewPager
视图中有一个按钮。此按钮通过名为HelperLinkerListener
的接口与MainActivity
进行通信,该接口由MainActivity
实现。我知道接口接线正确,因为我已经通过logcat对其进行了测试
我想让按钮交换我的包装RelativeLayout
以获得一个新的片段。以下是myonHelperLinkerClick()的当前内容:
在这里,charGson是一个正确定义的类,它实现了Parcelable。线路
ft.remove(getSupportFragmentManager().findFragmentById(R.id.container));
引发以下空指针异常:
java.lang.NullPointerException:尝试读取字段“int”
空对象上的android.support.v4.app.Fragment.mContainerId
参考文献
我不清楚如何解决这个问题。有什么想法吗?只要试着用getSupportFragmentManager()更改fm即可。
因此,它将成为
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
在我的例子中,在尝试删除null
的片段时引发了完全相同的异常。您可以插入一个代码
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction().remove(null).commit();
并查看您的错误日志。问题是异常不会被抛出到这个字符串上,而是稍后在Android源代码中的某个地方抛出,并且您看不到哪个代码字符串是异常的原因。如果容器中还没有片段
,findFragmentById(R.id.container)
将返回null,而remove()
调用将引发该异常。另外,FragmentTransaction
s只对Fragment
s起作用,因此remove()
调用不会对您的ViewPager
,AppBarLayout
等产生任何影响。,除非它们是片段的视图的一部分。您的fm
定义在哪里?fm是在主活动的onCreate()方法中定义的。Mike M,你说得对,findFragmentById()返回null。我正在修复。fm不为空;那部分正在发挥作用。Mike M.在上面的评论让我走上了正确的道路——当我得到更好的答案时,我会更新。如果我错了,请纠正我。。因此,您想交换按钮上的片段
,并将片段
添加到查看页面
?
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction().remove(null).commit();