我正在开发一个社交网络应用程序,我需要向订阅者显示订阅源..以便在列表中显示订阅源。我正在使用RecyclerView
。直到现在都没有问题......但是当我必须在Feed上显示一些评论时问题就出现了。我正在尝试完成类似于Instagram的布局,他们在主列表中显示图像并且最多3-4条评论。我从服务器获取图像链接及其注释(以JSON数组形式)..有时我得到注释数组大小0和有时1/2 ../ 10。我为评论布局创建了一个包含2个TextView
的XML,我根据FeedViewHolder
ViewType
在item_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的项目上多次添加它?
非常感谢任何帮助!
答案 0 :(得分:0)
i相信您需要在主回收站视图中创建嵌套的回收站视图,并且需要将数据作为注释的数据传递到嵌套适配器。所以基本上是
1.)主循环器视图包含标题,图像,RecyclerView评论(根据instagram)
2.)在第二个reyclerview中放置上面的注释布局,并创建一个单独的适配器,数据作为注释
Thats It ..向我询问任何进一步的帮助