首页 > 解决方案 > 如何从 Intent 遍历自定义对象的 ArrayList 并将它们添加到 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];
        }
    };

标签: javaandroid

解决方案


1.首先在你的FlightData对象模型/pojo/class中实现Parceable

2.val flightDataList= ArrayList<FlightData>()

3.val args = Bundle()

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

5.intent.putExtra(args)

然后获取列表

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


推荐阅读