Как использовать parcelable с сеттерами и геттерами? - PullRequest
0 голосов
/ 05 октября 2019

Я использую реализацию parcelable, потому что легче передать ArrayList с putParcelableArrayListExtra, но какова цель protected Song(Parcel in) and public void writeToParcel(Parcel dest, int flags)

Мой класс parcelable

public class Song implements Parcelable {

    private long id = 0;
    private String data = "";
    private String title = "";
    private String artist = "";

    public Song(){
    }

    protected Song(Parcel in) {
          id = in.readLong();
          data = in.readString();
          title = in.readString();
          artist = in.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(id);
        dest.writeString(data);
        dest.writeString(title);
        dest.writeString(artist);
    }

    public void setId(long songId){ this.id = songId; }
    public long getId(){
        return id;
    }
    public void setData(String data) { this.data = data; }
    public String getData(){return data;}

    //Optional meta data

    public void setTitle(String title){ this.title = title; }
    public String getTitle() { return title; }

    public void setArtist(String artist){
        this.artist = artist;
    }
    public String getArtist() {
        return artist;
    }

Длячто это используется, мне все еще нужно добавить это, если я не передаю какие-либо параметры моему конструктору Song () или я могу просто оставить его пустым?

protected Song(Parcel in) {
            id = in.readLong();
            data = in.readString();
            title = in.readString();
            artist = in.readString();
        }

 @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeLong(id);
            dest.writeString(data);
            dest.writeString(title);
            dest.writeString(artist);
        }

1 Ответ

0 голосов
/ 05 октября 2019

Нам нужен этот метод, потому что он переопределяет метод и с помощью getter и setter будет работать автоматически, если вы не удалите его и вручную создадите setter & getter

@Override
public void writeToParcel(Parcel dest, int flags) {
     dest.writeLong(id);
     dest.writeString(data);
     dest.writeString(title);
     dest.writeString(artist);
}
...