简体   繁体   中英

Custom Object intent Parcelable element arraylist

This code works but I do not pass the data contained in the arrayList .

public class Percorso implements Parcelable {

  int id;
  String nome;
  double distanza;
  int numero_commenti;
  double valutazione;
  ArrayList<Commento>  commenti;
  ArrayList<Cordinate>  cordinate;

  public Percorso(){

  }

  protected Percorso(Parcel in) {
  id = in.readInt();
  nome = in.readString();
  distanza = in.readDouble();
  numero_commenti = in.readInt();
  valutazione = in.readDouble();
  }

  public static final Creator<Percorso> CREATOR = new Creator<Percorso>() {
      @Override
       public Percorso createFromParcel(Parcel in) {
           return new Percorso(in);
        }

        @Override
          public Percorso[] newArray(int size) {
             return new Percorso[size];
           }
        };

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }
        public String getNome() {
            return nome;
        }

        public void setNome(String nome) {
            this.nome = nome;
        }

        public double getDistanza() {
            return distanza;
        }

        public void setDistanza(double distanza) {
            this.distanza = distanza;
        }

        public int getNumero_commenti() {
            return numero_commenti;
        }

        public void setNumero_commenti(int numero_commenti) {
            this.numero_commenti = numero_commenti;
        }

        public double getValutazione() {
            return valutazione;
        }

        public void setValutazione(double valutazione) {
            this.valutazione = valutazione;
        }
        public ArrayList<Commento> getCommenti() {
            return commenti;
        }

        public void setCommenti(ArrayList<Commento> commenti) {
            this.commenti = commenti;
        }
        public ArrayList<Cordinate> getCordinate() {
            return cordinate;
        }

        public void setCordinate(ArrayList<Cordinate> cordinate) {
            this.cordinate = cordinate;
        }

        @Override
        public int describeContents() {
            return 0;
        }

        @Override
        public void writeToParcel(Parcel parcel, int i) {
            parcel.writeInt(id);
            parcel.writeString(nome);
            parcel.writeDouble(distanza);
            parcel.writeInt(numero_commenti);
            parcel.writeDouble(valutazione);
        }
    }

//

public class Cordinate  implements Parcelable {
    double latitudine;
    double longitudin;
    public Cordinate(){}

    protected Cordinate(Parcel in) {
        latitudine = in.readDouble();
        longitudin = in.readDouble();
    }

    public static final Creator<Cordinate> CREATOR = new Creator<Cordinate>() {
        @Override
        public Cordinate createFromParcel(Parcel in) {
            return new Cordinate(in);
        }

        @Override
        public Cordinate[] newArray(int size) {
            return new Cordinate[size];
        }
    };

    public double getLatitudine() {
        return latitudine;
    }

    public void setLatitudine(double latitudine) {
        this.latitudine = latitudine;
    }

    public double getLongitudin() {
        return longitudin;
    }

    public void setLongitudin(double longitudin) {
        this.longitudin = longitudin;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeDouble(latitudine);
        parcel.writeDouble(longitudin);
    }
}

INTENT

 Percorso percorsoClick = listaPercorsi.get(i);

                            Intent intent = new Intent(getBaseContext(), PercorsoActivity.class);
                            intent.putExtra("percorso", percorsoClick);
                            startActivity(intent);

GET INTENT

percorso = getIntent().getParcelableExtra("percorso");
    System.out.println(percorso.getNome());

getNome() work because is not a arrayList .

instead get getCordinate not work.

percorso.getCordinate().size() // null

I hope it was clear. I have set the Parcelable implementation on all classes.

Thank you very much for the help

ArrayList<Cordinate> cordinate ; is not being parcelled. You still have to take care of write/read in/from Parcel parcel . Eg

    protected Percorso(Parcel in) {
        id = in.readInt();
        nome = in.readString();
        distanza = in.readDouble();
        numero_commenti = in.readInt();
        valutazione = in.readDouble();
        cordinate = new ArrayList<Cordinate>();
        in.readList(cordinate,Cordinate.class.getClassLoader());
    }

and

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(id);
        parcel.writeString(nome);
        parcel.writeDouble(distanza);
        parcel.writeInt(numero_commenti);
        parcel.writeDouble(valutazione);
        parcel.writeList(cordinate);
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM