【问题标题】:convert arraylist of objects to parcel and back将对象的arraylist转换为包裹并返回
【发布时间】:2013-08-20 08:50:58
【问题描述】:

我有以下课程:

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&lt;ListItem&gt; _items = new ArrayList&lt;ListItem&gt;();

其中包含 ad 对象的列表(它是 ListItem 的子对象,仅包含 enum

我想从_items ArrayList&lt;ListItem&gt; 创建一个打包的Ad 对象的数组列表

打包的实现是在 Ad 类上执行的。

我希望能提供一些关于如何实现这一目标的示例。

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

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

在源活动中和

_items=intent.getParcelableArrayListExtra("ads");

在目标活动中,但出现错误:

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

请帮忙

【问题讨论】:

  • 你试过什么?从 android 示例来看,这应该非常简单
  • ArrayList 本身是可序列化的..
  • 我已经尝试使用开发者指南示例:

标签: android android-intent arraylist parcelable


【解决方案1】:

在您的代码中,Ad 类实现 Parcelable,而不是 ListItem,使 ListItem 实现 Parcelable,然后您的代码应该可以工作。

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2013-01-06
    • 2020-10-29
    • 2014-06-01
    • 2011-09-09
    相关资源
    最近更新 更多