如何将 List<Model> 从 Activity 传递到 Fragment
Posted
技术标签:
【中文标题】如何将 List<Model> 从 Activity 传递到 Fragment【英文标题】:How can I pass List<Model> from Activity to 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 + '\'' +
'';
我是否必须在我的所有 Model 类中实现 parcelable 或 serializable?
当我制作捆绑包时,正确的方法是什么? (putSerializable?putParcelable?)
如何获取片段中的列表。
【问题讨论】:
1-使您的模型可序列化或 Parcelable 任何您想要的。 2- 使用您在片段中使用的可序列化或 Parcelable 获取列表。 how to pass List<NameOfClassObject> from activity to fragment的可能重复 【参考方案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
我是否必须在我的所有 Model 类中实现 parcelable 或 serializable ? --> 是的,你必须在所有类中实现 Parcelable 或 serializable
当我制作捆绑包时,正确的方法是什么? (putSerializable?putParcelable?) --> 如果你正在使用可序列化,那么你必须使用 putSerializable 否则 putParcelable
如何获取片段中的列表。 -->
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");
【讨论】:
以上是关于如何将 List<Model> 从 Activity 传递到 Fragment的主要内容,如果未能解决你的问题,请参考以下文章
无法将类型“System.Collections.Generic.List<model1>”隐式转换为“System.Collections.Generic.List<model2&
使用 jquery 从视图提交包含输入和 List<Model> 的表单到操作
jquery 中$.post获取MVC Controller中JsonResult返回包含LIst<Model>类型的子List<Model>的高级使用方法