2016-07-24 30 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

相關問題