简体   繁体   English

自定义对象意图可拆分元素arraylist

[英]Custom Object intent Parcelable element arraylist

This code works but I do not pass the data contained in the arrayList . 这段代码有效,但是我不传递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 . 因为不是arrayList所以getNome()起作用。

instead get getCordinate not work. 相反, getCordinate不起作用。

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

I hope it was clear. 我希望这很清楚。 I have set the Parcelable implementation on all classes. 我已经在所有类上设置了Parcelable实现。

Thank you very much for the help 非常感谢你的帮助

ArrayList<Cordinate> cordinate ; ArrayList<Cordinate> cordinate ; is not being parcelled. 没有被取消。 You still have to take care of write/read in/from Parcel parcel . 您仍然需要注意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);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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