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

时间:2017-03-17 04:57:23

标签: android android-fragments interface

我有一个程序,其默认用户界面为ViewPagerTabLayoutMainActivityCoordinatorLayoutViewpagerAppBarLayoutTabLayout都包含在RelativeLayout中,我打算将其用作容器,用于将主UI交换为不同的视图。

在其中一个ViewPager视图中托管是一个按钮。此按钮通过MainActivity实现的HelperLinkerListener接口与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'   参考

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

2 个答案:

答案 0 :(得分:0)

尝试使用getSupportFragmentManager()更改fm 所以它会成为

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

答案 1 :(得分:0)

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

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

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