android - 将 Activity 中的 Arraylist 传递给 Fragment

标签 android parcelable

我有 MyClass 实现 Parcelable。并有2个 fragment 。在 MainActivity (onCreate) 中我有代码:

ArrayList<MyClass> data = new ArrayList<MyClass>();
............
Bundle extras1 = new Bundle();
extras1.putParcelableArrayList("arraylist", data);
Tab1Fragment fg = new Tab1Fragment();
fg.setArguments(extras1);

在 Fragment(onCreateView) 中:

Bundle extras = getArguments(); 
ListView list = (ListView) content.findViewById(R.id.lvMain);
if (extras != null) {
    data = extras.getParcelableArrayList("arraylist");
    list.setAdapter(new MyAdapter(getActivity(), data));
}

但是 extras 总是 null。为什么?:)

最佳答案

您提供的代码似乎没问题。我怀疑问题出在您实现 MyClass 的方式上。 Parcelable 的典型实现是这样的(取自谷歌)

public class MyParcelable implements Parcelable {
 private int mData;

 public int describeContents() {
     return 0;
 }

 public void writeToParcel(Parcel out, int flags) {
     out.writeInt(mData);
 }

 public static final Parcelable.Creator<MyParcelable> CREATOR
         = new Parcelable.Creator<MyParcelable>() {
     public MyParcelable createFromParcel(Parcel in) {
         return new MyParcelable(in);
     }

     public MyParcelable[] newArray(int size) {
         return new MyParcelable[size];
     }
 };

 private MyParcelable(Parcel in) {
     mData = in.readInt();
 }

关于android - 将 Activity 中的 Arraylist 传递给 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21161367/

相关文章:

android - Sqlite 返回 : error code = 1, msg = 没有这样的表:client_table

java - 谷歌眼镜 : Can't swipe between cards in immersion

android - 在模块 jetified-google-play-services.jar 和 jetified-play-services-base-17.0.0-runtime.jar 中发现重复的类

Android 调试器 - Firebase 对象被混淆

java - 如何在parcelable android studio java中传递一个具有抽象类类型的类作为参数

android - 在android中的activity之间传递对象为什么要Parcelable?为什么不是 JSON 字符串?

Android:使用 Parcel 难以将对象从一个 Activity 传递到另一个 Activity

android - 扩展 Parcelable 以读取另一个 Parcelable

java - android studio中每次点击按钮都会增加数字

android - 在 Activity 之间同步可打包状态?