java.lang.RuntimeException:地块:当意图从viewpager片段到活动时,无法封送值

时间:2019-03-29 12:13:12

标签: java android android-fragments

我有一个执行步进的活动。第一步是选择我拥有的2项,然后使用Serializable将其传递到另一步,并且第一步和第二步之间的通信没有问题。在第三步中,它显示比较我选择的两个项目的结果。比较的结果显示了用于这两个项目的植物。

每个项目都有一个成分,我在最后一个片段上显示了选项卡布局的差异(第3步)。配料显示的方式很好,这里没问题。但是,当我实现了意图以转到显示有关成分的详细信息的页面时,该页面将显示Java.lang.RuntimeException:宗地:无法编组值。我使用putextra将我需要的id成分发送到详细成分活动。我使用回收站视图来显示所有成分,并在回收站视图的适配器上添加意图。我在另一页上使用了相同的方式(但是在本例中,我将活动性与选项卡布局一起使用,而不是像在这种情况下那样将选项卡与选项卡布局一起使用),它可以完美地工作,并且可包裹性没有错误。

这是关于在步骤1和步骤2之间使用可序列化发送arraylist的代码行

//send data     
Bundle bundle = new Bundle();
bundle.putSerializable("idJamu", (Serializable) chosenJamu);
step2fragment.setArguments(bundle);

//receive data
 final ArrayList<jamuModelComparison> idJamu =  (ArrayList<jamuModelComparison>)getArguments().getSerializable("idJamu");

这里没有错误,因为我可以在第二步显示数据,这是调用选项卡布局的最后一步

tabLayout = (TabLayout) view.findViewById(R.id.tablayoutComparisonJamu);
    viewPager = (ViewPager) view.findViewById(R.id.viewPagerComparisonJamu);

    viewPagerComparisonJamu adapter = new viewPagerComparisonJamu(getChildFragmentManager());

    tabPlantComparison1 comparisonJamu1 = new tabPlantComparison1();
    tabPlantComparisonJamu2 comparisonJamu2 = new tabPlantComparisonJamu2();

    Bundle bundle = new Bundle();
    bundle.putString("idjamu1",idjamu1);
    bundle.putString("idjamu2",idjamu2);



    comparisonJamu1.setArguments(bundle);
    comparisonJamu2.setArguments(bundle);

    adapter.addFragment(comparisonJamu1,"Jamu 1");
    adapter.addFragment(comparisonJamu2,"Jamu 2");
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

这是标签布局部分1

Bundle bundle = this.getArguments();
        idHerbal = bundle.getString("idjamu1");
        getArguments().remove("idjamu1");
        Log.d("plantTab","idplant = "+ idHerbal);
        Log.d("tab 1 comparison","tab called = " + idHerbal);
        getIdCrude(idHerbal);
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview_plant_comparison_jamu1);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        adapter = new showsPlantAdapter(crudeModels,getActivity());
        recyclerView.setAdapter(adapter);

这是标签布局部分2

crudeModels = new ArrayList<>();
        Bundle bundle = this.getArguments();
        idHerbal = bundle.getString("idjamu2");
        getArguments().remove("idjamu2");
        Log.d("plantTab","idplant = "+ idHerbal);
        Log.d("tab 2 comparison","tab called = " + idHerbal);
        getIdCrude(idHerbal);
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview_plant_comparison_jamu2);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        adapter = new showsPlantAdapter(crudeModels,getActivity());
        recyclerView.setAdapter(adapter);

几乎与选项卡布局1相同,但是使用不同的idherbs。

这是在回收站视图中使用意图的商品的适配器

crudeViewHolderComparison.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(mCtx, detailCrude.class);
            i.putExtra("idPlant",idPlant);
            mCtx.startActivity(i);

        }
    });

这是我在详细信息类上收到它的方式

String idPlant = getIntent().getStringExtra("idPlant");

我已经尝试将其用于另一个完全不需要任何捆绑包的活动,但仍然会产生关于包裹的错误。而有趣的部分是错误总是来自第一个“选项卡布局”部分,每个项目我总是总是从选项卡1中选择错误,即使我很难按一下选项卡2上的项目(基于logcat)。 这是logcat

2019-03-29 19:08:30.754 24942-24942/com.example.ilham.obatherbal E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ilham.obatherbal, PID: 24942
java.lang.RuntimeException: Parcel: unable to marshal value Enolimit
    at android.os.Parcel.writeValue(Parcel.java:1508)
    at android.os.Parcel.writeList(Parcel.java:820)
    at android.os.Parcel.writeValue(Parcel.java:1455)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:732)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1423)
    at android.os.Bundle.writeToParcel(Bundle.java:1133)
    at android.os.Parcel.writeBundle(Parcel.java:772)
    at android.support.v4.app.FragmentState.writeToParcel(FragmentState.java:124)
    at android.os.Parcel.writeTypedArray(Parcel.java:1338)
    at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:639)
    at android.os.Parcel.writeParcelable(Parcel.java:1527)
    at android.os.Parcel.writeValue(Parcel.java:1433)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:732)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1423)
    at android.os.Bundle.writeToParcel(Bundle.java:1133)
    at android.os.Parcel.writeBundle(Parcel.java:772)
    at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3685)
    at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3865)
    at android.os.Handler.handleCallback(Handler.java:754)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:165)
    at android.app.ActivityThread.main(ActivityThread.java:6375)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

Enolimit是具有我单击的成分的项目的示例

0 个答案:

没有答案