将对象的arraylist转换为parcel和back

时间:2013-08-20 08:50:59

标签: android android-intent arraylist parcelable

我有以下课程:

public class Ad extends ListItem implements Parcelable {


private String _type;
    private String _recordID; 
    private String _line1;
    private String _line2;
    private String _line3;
    private String _line4;
    private String _url;
    private Double _longitude;
    private Double _latitude;


public Ad() {

    }

    public Ad(Parcel parceledAd) {

        set_url(parceledAd.readString());
        set_latitude(parceledAd.readDouble());
        set_longitude(parceledAd.readDouble());
        set_recordID(parceledAd.readString());
        set_line1(parceledAd.readString());
        set_line2(parceledAd.readString());
        set_line3(parceledAd.readString());
        set_line4(parceledAd.readString());
    }

// getters and setters for appropiate fields are skipped but they exsist.

<pre>// inherited from listItem
    @Override
    public ListItemType getType() {
        return ListItemType.Ad;
    }
    <pre>// inherited from the parcelable interface</pre>

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parceledAd, int flags) {

        parceledAd.writeString(get_url());
        parceledAd.writeDouble(get_latitude());
        parceledAd.writeDouble(get_longitude());
        parceledAd.writeString(get_recordID());
        parceledAd.writeString(get_line1());
        parceledAd.writeString(get_line2());
        parceledAd.writeString(get_line3());
        parceledAd.writeString(get_line4());

    }

    public static final Parcelable.Creator<Ad> CREATOR = new Parcelable.Creator<Ad>() {

        @Override
        public Ad createFromParcel(Parcel parceledAd) {
            return new Ad(parceledAd);
        }

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

    };

}

在源活动上我有一个类型的数组列表: -

private ArrayList<ListItem> _items = new ArrayList<ListItem>();

其中包含ad个对象的列表(ListItem的子项仅包含enum

我想从Ad

创建一个包含_items ArrayList<ListItem>个对象的数组列表

在广告类上执行了parcelised实施。

我很欣赏一些如何实现这一目标的例子。

我尝试过使用开发者网站中描述的方法:

Intent i=new Intent(this,MapActivity.class);
i.putParcelableArrayListExtra("ads", (ArrayList<? extends Parcelable>) _items);
源活动中的

_items = intent.getParcelableArrayListExtra( “广告”);

在目标活动中,但我收到错误:

绑定不匹配:Intent类型的泛型方法getParcelableArrayListExtra(String)不适用于参数(String)。推断类型ListItem不是有界参数

的有效替代

请帮助

1 个答案:

答案 0 :(得分:0)

在您的代码上,Ad类实现Parcelable,而非ListItem,使ListItem实现Parcelable,然后您的代码应该有效。