2016-07-24 13 views
0

Ich möchte eine Liste von Liste von einer Aktivität zu einer anderen übergeben. Hier ist meine Herangehensweise.Kann Parcelable-Liste in einem Bündel in einer anderen Aktivität nicht abrufen

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); 

     } 
    }); 

Ich bin in der Lage, alle Attribute des feeditem mit Ausnahme der Liste, die mir null in der Empfangsaktivität gibt. Könnte mir bitte jemand helfen. Danke im Voraus.

Antwort

0

ich glaube, das Problem ist, dass Sie nur in der Liste zu lesen sind, wenn es bereits nicht-null ist:

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

Wenn es null ist, die es an diesem Punkt sein wird, ist es nicht bekommen einstellen. Entfernen Sie einfach den Nicht-Null-Check und ich denke, es wird funktionieren.

+0

Ich benutze einen Getter, um die Liste von der Feeditem zu bekommen, schau näher.- Ich verwende feeditem.getcommentitems anstelle von commentarems, die ich weiß, ist immer null. – rohanagarwal94

+0

Haben Sie schon Ihren Vorschlag ausprobiert ... Nein gut :( – rohanagarwal94

+0

Sie haben 'FeedItem' geändert, wie ich es vorgeschlagen habe? Das ist, worüber ich sprach, nicht' ReceivingActivity'. – nasch