Как я могу передать список <Model>от действия к фрагменту - PullRequest
0 голосов
/ 11 июня 2018

Я хочу передать Список от Деятельности до Фрагмента.Но я не знаю, класс модели должен реализовывать «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. Придется ли мне применять посылки, способные или сериализуемые во всех моих классах моделей?

  2. КогдаЯ делаю расслоение Что такое правильный метод?(putSerializable? putParcelable?)

  3. Как получить список во фрагменте.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Thers - это два способа передать ваш Список из Деятельности во Фрагмент.1.Serializable и 2. Parcelable

  1. Придется ли мне внедрять посылки, способные или сериализуемые во всех моих классах Model?-> Да, вы должны реализовать Parcelable или сериализуемый во всех ваших классах

  2. Когда я делаю связку Что такое правильный метод?.->

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"); 
0 голосов
/ 11 июня 2018

Вы можете реализовать 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];
...