【问题标题】:How can I pass List<Model> from Activity to Fragment如何将 List<Model> 从 Activity 传递到 Fragment
【发布时间】:2018-11-20 12:49:59
【问题描述】:

我想将列表从活动传递到片段。但我不知道模型类必须实现“Parcelable”或“Serializable”。还有如何定义实现方法。感谢您看到这个问题。在代码下是我的模型类。

 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. 我是否必须在我的所有 Model 类中实现 parcelable 或 serializable?

  2. 当我制作捆绑包时,正确的方法是什么? (putSerializable?putParcelable?)

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

【问题讨论】:

标签: java android parcelable serializable


【解决方案1】:

您可以在模型类中实现 parcelable。

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];

【讨论】:

    【解决方案2】:

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

    1. 我是否必须在我的所有 Model 类中实现 parcelable 或 serializable ? --> 是的,你必须在所有类中实现 Parcelable 或 serializable

    2. 当我制作捆绑包时,正确的方法是什么? (putSerializable?putParcelable?) --> 如果你正在使用可序列化,那么你必须使用 putSerializable 否则 putParcelable

    3. 如何获取片段中的列表。 -->

    1.使用可序列化

    发送对象列表

        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"); 
    

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多