无法在另一个活动的捆绑包中获取Parcelable列表

时间:2016-07-24 17:19:33

标签: java android arraylist bundle parcelable

我想要的是将列表从一个活动传递到另一个活动。这是我的方法。

Feeditem.java

public class FeedItem implements Parcelable {

private String  id,status, image, timeStamp, url;
private ArrayList<CommentItem> commentItems;

public FeedItem() {
}


protected FeedItem(Parcel in) {
    id = in.readString();
    status = in.readString();
    image = in.readString();
    timeStamp = in.readString();
    url = in.readString();
    if(commentItems!=null) {
        in.createTypedArrayList(CommentItem.CREATOR);
    }
}

public static final Creator<FeedItem> CREATOR = new Creator<FeedItem>() {
    @Override
    public FeedItem createFromParcel(Parcel in) {
        return new FeedItem(in);
    }

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

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getImge() {
    return image;
}

public void setImge(String image) {
    this.image = image;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getTimeStamp() {
    return timeStamp;
}

public void setTimeStamp(String timeStamp) {
    this.timeStamp = timeStamp;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public ArrayList<CommentItem> getCommentItems() {
    return commentItems;
}

public void setCommentItems(ArrayList<CommentItem> commentItems)
{
    this.commentItems=commentItems;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(id);
    dest.writeString(status);
    dest.writeString(image);
    dest.writeString(timeStamp);
    dest.writeString(url);
    dest.writeTypedList(commentItems);
}}

CommentItem.java

public class CommentItem implements Parcelable{

private String  id,comment, from, timeStamp;

public CommentItem() {
}

protected CommentItem(Parcel in) {
    id = in.readString();
    comment = in.readString();
    from = in.readString();
    timeStamp = in.readString();
}


public static final Creator<CommentItem> CREATOR = new Creator<CommentItem>() {
    @Override
    public CommentItem createFromParcel(Parcel in) {
        return new CommentItem(in);
    }

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

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getFrom() {
    return from;
}

public void setFrom(String from) {
    this.from = from;
}

public String getComment() {
    return comment;
}

public void setComment(String comment) {
    this.comment = comment;
}

public String getTimeStamp() {
    return timeStamp;
}

public void setTimeStamp(String timeStamp) {
    this.timeStamp = timeStamp;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(id);
    dest.writeString(comment);
    dest.writeString(from);
    dest.writeString(timeStamp);
}}

ReceivingActivity.java

 ArrayList<CommentItem> commentItems;
    FeedItem feedItem;
    commentItems=new ArrayList<>();
    Bundle bundle=getIntent().getExtras();

    feedItem=bundle.getParcelable("status");

    if(feedItem.getCommentItems()!=null) {                //help here
        commentItems = feedItem.getCommentItems();
    }

SendingActivity.java

Button getComments=(Button)convertView.findViewById(R.id.commentsbutton);
    getComments.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                Intent i = new Intent(activity, CommentActivity.class);
                Bundle bundle = new Bundle();
                bundle.putParcelable("status", item);  //item is feeditem 
                i.putExtras(bundle);
                activity.startActivity(i);

        }
    });

我能够获得feeditem的所有属性,除了在接收活动中给我null的列表。有人可以帮我解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为问题是你只是在列表中读取它是否已经非空:

if(commentItems!=null) {
        in.createTypedArrayList(CommentItem.CREATOR);
    }

如果它为null,它将在那一点上,它不会被设置。只需删除非空检查,我认为它会起作用。

commentItems = in.createTypedArrayList(CommentItem.CREATOR);