2016-07-24 58 views
0

我想要的是将列表从一个活动传递到另一个活动。这是我的方法。无法在另一个活动的包中获取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); 

     } 
    }); 

我能够获得除接收活动中给予null的列表以外的所有feeditem属性。有人能帮我解决这个问题吗?提前致谢。

回答

0

我认为问题是,你只能在列表阅读,如果它已经是非空:

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

如果是空值,这将是在这一点上,它不会组。只要删除非空检查,我认为它会起作用。

commentItems = in.createTypedArrayList(CommentItem.CREATOR); 
+0

我使用getter从feeditem中获取列表,看起来更接近.-我正在使用feeditem.getcommentitems而不是评论项,我知道它总是为空。 – rohanagarwal94

+0

已经尝试过您的建议...不好: – rohanagarwal94

+0

您改变了'FeedItem',因为我建议?这就是我所说的,而不是'ReceivingActivity'。 – nasch

相关问题