如何将 List<Model> 从 Activity 传递到 Fragment

How can I pass List<Model> from Activity to Fragment

我想将 List 从 Activity 传递给 Fragment。但我不知道模型 class 必须实现 'Parcelable' 或 'Serializable'。还有如何定义实现方法。感谢您看到这个问题。代码下面是我的模型 class.

 public class Artist {

private String artistName;
private String aritstImgPath;
private List<Album> albumList;

public Artist() {

}

public Artist(String artistName, String aritstImgPath, List<Album> albumList) {
    this.artistName = artistName;
    this.aritstImgPath = aritstImgPath;
    this.albumList = albumList;
}


public String getArtistName() {
    return artistName;
}

public void setArtistName(String artistName) {
    this.artistName = artistName;
}

public String getAritstImgPath() {
    return aritstImgPath;
}

public void setAritstImgPath(String aritstImgPath) {
    this.aritstImgPath = aritstImgPath;
}

public List<Album> getAlbumList() {
    return albumList;
}

public void setAlbumList(List<Album> albumList) {
    this.albumList = albumList;
}

@Override
public String toString() {
    return "Artist{" +
            "artistName='" + artistName + '\'' +
            ", aritstImgPath='" + aritstImgPath + '\'' +
            ", albumList=" + albumList +
            '}';
}

}

public class Album {
private String albumTitle;
private String albumImgPath;
private List<Song> songList;

public Album() {
}

public Album(String albumTitle, String albumImgPath, List<Song> songList) {
    this.albumTitle = albumTitle;
    this.albumImgPath = albumImgPath;
    this.songList = songList;
}

public String getAlbumTitle() {
    return albumTitle;
}

public void setAlbumTitle(String albumTitle) {
    this.albumTitle = albumTitle;
}

public String getAlbumImgPath() {
    return albumImgPath;
}

public void setAlbumImgPath(String albumImgPath) {
    this.albumImgPath = albumImgPath;
}

public List<Song> getSongList() {
    return songList;
}

public void setSongList(List<Song> songList) {
    this.songList = songList;
}

@Override
public String toString() {
    return "Album{" +
            "albumTitle='" + albumTitle + '\'' +
            ", albumImgPath='" + albumImgPath + '\'' +
            ", songList=" + songList +
            '}';
}
}

public class Song {
private String songTitle;
private String playTime;
private String assPath;
private String ampPath;

public Song() {
}

public Song(String songTitle, String playTime, String assPath, String ampPath) {
    this.songTitle = songTitle;
    this.playTime = playTime;
    this.assPath = assPath;
    this.ampPath = ampPath;
}

public String getSongTitle() {
    return songTitle;
}

public void setSongTitle(String songTitle) {
    this.songTitle = songTitle;
}

public String getPlayTime() {
    return playTime;
}

public void setPlayTime(String playTime) {
    this.playTime = playTime;
}

public String getAssPath() {
    return assPath;
}

public void setAssPath(String assPath) {
    this.assPath = assPath;
}

public String getAmpPath() {
    return ampPath;
}

public void setAmpPath(String ampPath) {
    this.ampPath = ampPath;
}

@Override
public String toString() {
    return "Song{" +
            "songTitle='" + songTitle + '\'' +
            ", playTime='" + playTime + '\'' +
            ", assPath='" + assPath + '\'' +
            ", ampPath='" + ampPath + '\'' +
            '}';
}
}
  1. 我是否必须在我的所有模型中实现 parcel able 或 serializable class?

  2. 我做bundle的时候正确的方法是什么? (putSerializable?putParcelable?)

  3. 如何在片段中获取列表。

您可以在您的模型中实现 parcelable class。

public class ModelClass implements Parcelable {

        public ModelClass(Parcel in) {
            super(); 
            readFromParcel(in);
        }

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

            public ModelClass [] newArray(int size) {

                return new ModelClass [size];
            }

        };

        public void readFromParcel(Parcel in) {
          Value1 = in.readInt();
          Value2 = in.readInt();
          Value3 = in.readInt();

        }
        public int describeContents() {
            return 0;
        }

        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(Value1);
            dest.writeInt(Value2);  
            dest.writeInt(Value3);
       }
    }

正在将对象发送到片段。

ArrayList<ModelClass> arraylist = new Arraylist<>();  
Bundle bundle = new Bundle();  
bundle.putParcelableArrayList("arraylist", arraylist);

从片段接收​​对象

Bundle extras = getIntent().getExtras();  
ArrayList<ModelClass> arraylist  = extras.getParcelableArrayList("arraylist");  
ModelClass model= arrayList[0];

Thers 是将列表从 Activity 传递到 Fragment 的两种方法。 1.Serializable 和 2.Parcelable

  1. 我是否必须在我的所有模型 class 中实现 parcel able 或 serializable? --> 是的,您必须在所有 classes

  2. 中实现 Parcelable 或 serializable
  3. 当我制作bundle时,正确的方法是什么? (putSerializable? putParcelable?) --> 如果你正在使用 serializable 那么你必须使用 putSerializable 否则 putParcelable

  4. 如何在片段中获取列表。 -->

1.使用 Serializable

发送对象列表

    Bundle bundle = new Bundle();
    bundle.putSerializable("key",arraylist);

接收对象列表

 List<Model> = (List<Model>)  getArguments().getSerializable("key);

2。使用 Parcelable

发送对象列表

Bundle bundle = new Bundle();  
bundle.putParcelableArrayList("key", arraylist);

接收对象列表

List<Model>  arraylist  = getArguments().getParcelableArrayList("arraylist");