动态地将视图或膨胀布局添加到RecyclerView的项目

时间:2016-04-14 14:05:22

标签: java android android-recyclerview

我正在开发一个社交网络应用程序,我需要向订阅者显示订阅源..以便在列表中显示订阅源。我正在使用RecyclerView。直到现在都没有问题......但是当我必须在Feed上显示一些评论时问题就出现了。我正在尝试完成类似于Instagram的布局,他们在主列表中显示图像并且最多3-4条评论。我从服务器获取图像链接及其注释(以JSON数组形式)..有时我得到注释数组大小0和有时1/2 ../ 10。我为评论布局创建了一个包含2个TextView的XML,我根据FeedViewHolder ViewTypeitem_comment中对其进行了膨胀。我的<RelativeLayout android:id="@+id/comment_layout" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="5dp" android:paddingLeft="5dp" android:paddingTop="5dp"> <TextView android:textStyle="bold" android:textColor="@color/indigo_500" android:id="@+id/comment_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:src="@drawable/profile_pic" android:text="Somesh Kumar"/> <TextView android:id="@+id/comment_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/comment_name" android:ellipsize="end" android:paddingLeft="5dp" android:singleLine="true" android:text="This is a comment"/> </RelativeLayout> 看起来像

 @Override
public int getItemViewType(int position)
{
    FeedParser.DataClass dataClass = feedList.get(position);
    int ITEM_TYPE = 0;
    if (dataClass.getPost_type() == FEED_TYPE_PICTURE) // Feed item contains caption with pictures
    {
        // check if it has comments
        if (dataClass.getComments().size() == 0)
        {
            ITEM_TYPE = PICTURE_WITHOUT_COMMENTS;
        }
        else
        {
            ITEM_TYPE = PICTURE_WITH_COMMENTS;
        }
    }
    return ITEM_TYPE;
}

我将我的Feed列表传递给RecyclerView adaptor ..然后我正在检查项目(将显示)是否应该有评论。

ITEM_TYPE

并将onCreateViewHolder传递给 @Override public FeedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_feed, parent, false); return new FeedViewHolder(itemView, viewType); } ,如

FeedViewHolder
如果viewType有评论

,则会在 public FeedViewHolder(View itemView, int viewType) { super(itemView); tvFeedUsername = (TextView) itemView.findViewById(R.id.tvFeedUsername); tvFeedCaption = (TextView) itemView.findViewById(R.id.tvFeedCaption); switch (viewType) { // TODO: Write code for other feed type such as picture and video // viewType 1 = PICTURE_WITH_COMMENTS case 1: layoutComments = (LinearLayout) itemView.findViewById(R.id.layoutComments); commentView = layoutInflater.inflate(R.layout.item_comment, null); postCommentText = (TextView) commentView.findViewById(R.id.comment_text); postCommentName = (TextView) commentView.findViewById(R.id.comment_name); layoutComments.addView(commentView); break; } } 中填充项目布局和评论布局
holder.postCommentName

我已经验证这是完美的,但是当我为holder.postCommentText&amp; onBindViewHolder holder.postCommentText holder.postCommentName只为最后一条评论设置了文字(我知道这是因为我循环浏览所有评论并在同一 @Override public void onBindViewHolder(FeedViewHolder holder, int position) { FeedParser.DataClass feedModel = feedList.get(position); holder.tvFeedUsername.setText(feedModel.getName()); holder.tvFeedCaption.setText(feedModel.getPost_status()); if (getItemViewType(position) == TEXT_WITH_COMMENTS) { for (int commentNum = 0; commentNum < feedModel.getComments().size(); commentNum++) { holder.postCommentName.setText(feedModel.getComments().get(commentNum).getUser_name()); holder.postCommentText.setText(feedModel.getComments().get(commentNum).getComment()); } } } 和{{1}}上逐一设置这是我的onBindViewHolder ..

{{1}}

我不知道即使这是正确的方法......但这是有些人在这里写答案的方式......如This one 。我搜索了许多SO帖子但没有得到我想要的东西。有没有其他方法可以扩展评论的XML布局并在RecyclerView的项目上多次添加它?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

i相信您需要在主回收站视图中创建嵌套的回收站视图,并且需要将数据作为注释的数据传递到嵌套适配器。所以基本上是

 1.)主循环器视图包含标题,图像,RecyclerView评论(根据instagram)

2.)在第二个reyclerview中放置上面的注释布局,并创建一个单独的适配器,数据作为注释

Thats It ..向我询问任何进一步的帮助