Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 引发空对象引用的片段事务.replace()方法_Android_Android Fragments_Interface - Fatal编程技术网

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
以获得一个新的片段。以下是my
onHelperLinkerClick()的当前内容:

在这里,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();