【问题标题】:android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object referenceandroid.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' 在空对象引用上
【发布时间】:2021-01-19 14:28:12
【问题描述】:

我想在第一个片段中传递数据


                Bundle bundle = new Bundle();
                progress = DetailProgressFragmentArgs.fromBundle(getArguments()).getProgress();
                bundle.putParcelable("progress", progress);
                new DetailProgressFragment().setArguments(bundle);

                Log.d("testProgress", String.valueOf(progress.getProgress_id()));

                fragmentTransaction.replace(R.id.fragment, new DetailProgressFragment()).commit();
                fragmentTransaction.addToBackStack(null);

第二个片段

Bundle bundle = getArguments();
        progress = (Progress) bundle.getParcelable("progress");

错误

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)'

【问题讨论】:

  • 你在哪里称呼这个Bundle bundle = getArguments();?它应该在onCreate 之后调用

标签: java android android-fragments parcelable


【解决方案1】:

您创建了片段的两个实例。你应该只创建一个这样的。 基本上你收到 NullPointerException 是因为你在 replace() 里面放了一个新的片段实例,里面没有捆绑数据

Bundle bundle = new Bundle();
progress = DetailProgressFragmentArgs.fromBundle(getArguments()).getProgress();
bundle.putParcelable("progress", progress);
DetailProgressFragment myFragment = new DetailProgressFragment();
myFragment.setArguments(bundle);
Log.d("testProgress", String.valueOf(progress.getProgress_id()));

fragmentTransaction.replace(R.id.fragment,myFragment).commit();
fragmentTransaction.addToBackStack(null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多