自定义对象意图 可包裹元素数组列表



这段代码有效,但我不传递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);
    }
}

意图

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

获取意图

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

getNome()工作,因为不是arrayList

而是得到getCordinate不起作用。

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

我希望它很清楚。我已经在所有类上设置了可包裹实现。

非常感谢您的帮助

ArrayList<Cordinate> cordinate ; 未被打包。您仍然需要注意写入/读取/从Parcel parcel。例如

    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());
    }

    @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);
    }

最新更新