为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Intent 迭代自定义对象的 ArrayList 并将它们添加到

如何从 Intent 迭代自定义对象的 ArrayList 并将它们添加到

慕慕森 2023-09-27 14:54:15
我在意图中有一个自定义 FlightData 对象的 ArrayList。我加载意图并将数组列表设置为 null,并且 foreach 循环还强制我使用Objectas 类型。将 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];        }    };
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

查看完整回答
反对 回复 2023-09-27
?
慕沐林林

TA贡献2016条经验 获得超9个赞

它应该有效。我在你的例子中唯一缺少的是构造函数。它可以解释null你所得到的。


尝试添加这个构造函数FlightData


  public FlightData(Parcel in) {

    x = in.readDouble();

    y = in.readDouble();

    time  = in.readDouble();

  }


查看完整回答
反对 回复 2023-09-27
?
九州编程

TA贡献1785条经验 获得超4个赞

您是否尝试创建一个实现 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;

    }

}


查看完整回答
反对 回复 2023-09-27
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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")


查看完整回答
反对 回复 2023-09-27
  • 3 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信