首页 > 解决方案 > 将arraylist从一个片段解析到android中的另一个片段

问题描述

我如何将 JSON 的 Arraylist 从一个 Fragment 解析到另一个 Fragment 这是我的 arraylist 代码,我从我的模型中获取 arraylist:

private void setListOffers(JSONArray categoryArray) {
    for (int i = 0; i < categoryArray.length(); i++) {
        try {
            JSONObject object = categoryArray.getJSONObject(i);
            hotDealID = object.getInt("ID");
            deals.add(new ListOffers(hotDealID));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

在这里,我从片段发送数据:

private ArrayList<ListOffers> deals = new ArrayList<>();
Fragment fragment = new HotDealFragment();
Bundle  bundle = new Bundle();
bundle.putParcelableArrayList("dealsId", deals);
fragment.setArguments(bundle);

当我输入此代码时,交易会给出错误的第二个参数的异常,并且ListOffers是我正在获取数据的模型

这是我的模型列表提供:

private int Id;

public ListOffers(int Id){
    this.Id = Id;
}

public void setId(int id) {
    Id = id;
}

public int getId() {
    return Id;
}

标签: androidandroid-fragmentsarraylist

解决方案


一个可能的问题:

您的 ListOffers 模型没有实现 parcelable。你的模型应该实现 parcelable。您可以从此链接获得帮助

https://github.com/codepath/android_guides/wiki/Using-Parcelable

import android.os.Parcel;
import android.os.Parcelable;

public class ListOffers implements Parcelable {

private int Id;

public ListOffers(int Id) {
    this.Id = Id;
}

public void setId(int id) {
    Id = id;
}

public int getId() {
    return Id;
}

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

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

protected ListOffers(Parcel in) {

    Id = in.readInt();
}

public static final Creator<ListOffers> CREATOR = new Creator<ListOffers>() {

    @Override
    public ListOffers createFromParcel(Parcel in) {

        return new ListOffers(in);
    }

    @Override
    public ListOffers[] newArray(int size) {

        return new ListOffers[size];
    }
};
}

推荐阅读