使用ArrayList <custom-object> </custom-object>进行Parcelable实现

时间:2013-02-21 04:18:06

标签: java android android-intent parcelable

我认为这只是一个愚蠢的错误,但ArrayList总是最终null。它让我发疯,以为我会寻求帮助。

对象类:

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

public class StoryTag implements Parcelable {

    private String tagTitle;
    private int occurrence;

    public StoryTag() {

    }

    public StoryTag(Parcel in) {
        tagTitle = in.readString();
        occurrence = in.readInt();
    }

    public String getTagTitle() {
        return tagTitle;
    }

    public void setTagTitle(String tagstring) {
        this.tagTitle = tagstring;
    }

    public int getOccurrence() {
        return occurrence;
    }

    public void setOccurrence(int occurrence) {
        this.occurrence = occurrence;
    }

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

    public int describeContents() {
        return 0;
    }

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

        public StoryTag createFromParcel(Parcel in) {
            return new StoryTag(in);
        }

        public StoryTag[] newArray(int size) {
            return new StoryTag[size];
        }
    };
}

MainActivity

Intent tagIntent=new Intent(this,DisplayTagList.class);
tagIntent.putExtra("taglist", taglist);
startActivity(tagIntent);
return true;

接收活动:

Bundle storyTagBundle = getIntent().getExtras();
ArrayList<StoryTag> listoftags = storyTagBundle.getParcelable("taglist");

非常感谢您提供的任何帮助。把头发拉到这里是因为我觉得这是一个小错误。

2 个答案:

答案 0 :(得分:4)

putExtra()getSerializable()方法将存储和检索ArrayList<?>个自定义对象,而不需要实现任何接口。 (您的自定义对象类应该实现Serializable接口。)

但在您的情况下,您只需使用putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)getParcelableArrayListExtra(String name)

答案 1 :(得分:0)

您可以从完整的Example中获得实施ArrayList with Parcelable的明确想法。