簡體   English   中英

如何從 Intent 遍歷自定義對象的 ArrayList 並將它們添加到 LinearLayout?

[英]How do I iterate through an ArrayList of custom objects from Intent and add them into LinearLayout?

我在意圖中有一個自定義 FlightData 對象的 ArrayList。 我加載了意圖並將 arraylist 作為 null,foreach 循環也迫使我使用Object作為類型。

將 arraylist 保存到意圖中:

intent.putParcelableArrayListExtra("FlightDataList", (ArrayList<? extends Parcelable>) flightDataList);

加載意圖:

Intent intent = getIntent();
LinearLayout layout_datasheet =  findViewById(R.id.layout_datasheet);
List flightDataList = intent.getParcelableArrayListExtra("FlightDataList");

if (flightDataList == null){
    Log.d("flightDataList_size", "FlightDataList is null"); // this fires
}

assert flightDataList != null;
for (Object data : flightDataList){
    data = (FlightData) data; // items in list are of type FlightData
    TextView tv = new TextView(this);
    tv.setText(data.toString());
    layout_datasheet.addView(tv);
}

我的自定義類的可打包函數(x,y,時間,有 getters-setters):

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeDouble(x);
        dest.writeDouble(y);
        dest.writeDouble(time);
    }

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

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

1.首先在您的 FlightData object model / pojo / class 中實現 Parceable

val flightDataList= ArrayList<FlightData>()

3. val args = Bundle()

4. args.putParcelableArrayList("FlightDataList", flightDataList)

intent.putExtra(args)

然后獲取列表

val flightDataList = context.getIntent().getExtras().getParcelableArrayList("FlightDataList")

您是否嘗試創建一個實現 parcelable 的數據結構?

public class flightDataList implements Parcelable{
    String dataThingyString;
    int dataThingyInt;


    public flightDataList(String dataThingyString, int dataThingyInt){
        this.dataThingyString = dataThingyString;
        this.dataThingyInt = dataThingyInt;
    }

    public flightDataList(Parcle in){
        this.dataThingyString = in.readString();
        this.dataThingyInt = in.readInt();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags){
        dest.writeString(dataThingyString);
        dest.writeInt(dataThingyInt);
    }

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

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

    public void setdataThingyString(String stringData){
        this.dataThingyString = stringData;
    }

    public void setdataThingyInt(int intData){
        this.dataThingyInt = intData;
    }

    public String getdataThingyString(){
        return dataThingyString;
    }

    public int getdataThingyInt(){
        return dataThingyInt;
    }

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

它應該工作。 我在您的示例中唯一缺少的是構造函數。 它可以解釋你得到的null

嘗試為FlightData添加此構造函數

  public FlightData(Parcel in) {
    x = in.readDouble();
    y = in.readDouble();
    time  = in.readDouble();
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM