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");
我可以成功地将数组列表从 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");