Android:lossing 将数组列表的数组列表从 activity 传递到活动时的数据

Android:lossing data when pass arraylist of arraylists from activity to activty

我可以成功地将数组列表从 activity A 传递到 Activity B。如下所示:

在activity A :

            Intent intent = new Intent(Activity_A.this, Activity_B.class);
            intent.putParcelableArrayListExtra("albums", (ArrayList<? extends Parcelable>) albums);
            startActivity(intent);

模型专辑实现如下:

 public class Album implements Parcelable
 {
    public ArrayList<Song> Songs = new ArrayList<Song>();
    public int id;
    public String album_name;
    public String pic;



  public static final Creator<Album> CREATOR = new Creator<Album>()
  {
    @Override
    public Album createFromParcel(Parcel in)
    {
        return new Album(in);
    }

    @Override
    public Album[] newArray(int size)
    {
        return new Album[size];
    }
};

  @Override
  public int describeContents()
 {
    return 0;
 }

@Override
public void writeToParcel(Parcel parcel, int i)
{
    parcel.writeInt(id);
    parcel.writeString(album_name);
    parcel.writeString(pic);
}
 }

如图所示专辑包含歌曲数组列表和其他数据

下面是歌曲模型的实现:

    public class Song implements Parcelable
    {

      public int id;
      public String file_name;
      public String file_url;
      public String pic_url;
      public int Album_id;


       public static final Creator<Song> CREATOR = new Creator<Song>()
     {
      @Override
      public Song createFromParcel(Parcel in)
      {
        return new Song(in);
      }

    @Override
    public Song[] newArray(int size)
    {
        return new Song[size];
    }
  };


@Override
public int describeContents()
{
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i)
{
    parcel.writeInt(id);
    parcel.writeString(file_name);
    parcel.writeString(file_url);
    parcel.writeString(pic_url);
    parcel.writeInt(Album_id);

  }
  }


      }

并获取在 activity B 处传递的数据:

    Bundle bundle = getIntent().getExtras();
    ArrayList<Album> albums = bundle.getParcelableArrayList("albums");

这里的问题是数据从 Activity A 成功传递到 Activity B 但是 歌曲列表为空,每个歌曲的大小为零专辑虽然我打卡了 activity 一个每张专辑都有歌曲列表

您的歌曲列表是空的,因为您没有在 Album class.

writeToParcel(Parcel, int) 方法中将其保存到 Parcel

您的 writeToParcel(Parcel, int) 方法应如下所示:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeTypedList(this.Songs);
    dest.writeInt(this.id);
    dest.writeString(this.album_name);
    dest.writeString(this.pic);
}

并且 Album(Parcel) 像这样:

protected Album(Parcel in) {
    this.Songs = in.createTypedArrayList(Song.CREATOR);
    this.id = in.readInt();
    this.album_name = in.readString();
    this.pic = in.readString();
}

你可以这样传递ArrayList,

ActivityA

 Intent intent = new Intent(Activity_A.this, Activity_B.class);
 intent.putParcelableArrayListExtra("albums", albums);
 startActivity(intent);

ActivityB

  Bundle bundle = getIntent().getExtras();
  ArrayList<Album> albums=(ArrayList<Album>) bundle.getSerializable("albums");