У меня есть одно занятие, которое реализует степперы.первый шаг - выберите 2 элемента, которые у меня есть, а затем передайте их на другой шаг, используя Serializable, и не возникает проблем со связью между первым шагом и вторым шагом.На третьем шаге он показывает результат, который сравнивает два элемента, которые я выбираю.Результат сравнения показывает растения, которые используются для обоих элементов.
каждый элемент имеет ингредиенты, и я показываю различия с расположением вкладок на последнем фрагменте (шаг 3).способ показа ингредиентов хорош, здесь нет проблем.Но когда я реализую намерение перейти на страницу, которая показывает подробную информацию об ингредиентах, она показывает Java.lang.RuntimeException: Parcel: неспособно маршалировать значение.Я использую putextra, чтобы отправить идентификаторы ингредиентов, которые у меня есть, в детали ингредиентов.Я использую представление переработчика для отображения всех ингредиентов и добавляю намерения в адаптер представления переработчика.Я использую то же самое на другой странице (но в этом примере я использую activty с макетом вкладки, а не фрагмент с макетом вкладки, как в этом случае), он работает отлично, и нет ошибки в parcelable.
это строкакода об отправке массива с использованием сериализуемого между шагом 1 и шагом 2
//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 - пример предмета, в котором есть ингредиенты, на которые я нажимаю