Recyclerview:如何将一些帖子与图像和没有图像混合? [复制]
Posted
技术标签:
【中文标题】Recyclerview:如何将一些帖子与图像和没有图像混合? [复制]【英文标题】:Recyclerview : how to mix some post with image and no image? [duplicate] 【发布时间】:2019-08-23 07:33:03 【问题描述】:我想在同一个回收视图中显示,即有些帖子有图片,有些帖子没有图片。
我可以检索所有带有图片和非图片的帖子, 但是当用户只发布文本(无图像)时,我想更改帖子的大小。
我希望像 twitter 提要这样的输出..一些带有图片和不带图片的帖子有自己的大小。
【问题讨论】:
没有图像时可以显示一个图像视图,否则可以隐藏它显示 您可以根据条件将 Imageview 的 Visibility 设置为 Gone 或 Visible。 您要做的是创建一个具有多种视图类型的适配器。可能重复:***.com/questions/26245139/… 我建议使用默认图像,如果没有图像可用,它将覆盖。 ***.com/questions/26245139/… 【参考方案1】:正如一些人已经说过的,一种可能的解决方案是隐藏/显示 ImageView。
您可以在用于 RecyclerView 的 ViewHolder 中执行此操作。
class OptionalImageViewHolder extends RecyclerView.ViewHolder
private ImageView image;
private TextView text;
// any other views you have
public OptionalImageViewHolder(View itemView)
super(itemView);
image = itemView.findViewById(R.id.yourImageViewIdHere);
text = itemView.findViewById(R.id.yourTextViewIdHere);
// same for any other views you have
public void bindView(Tweet tweet)
// This is where the magic happens
// Note: I make the assumption that you have a class called "Tweet"
// that has a field for "text", a field for "image" (that can be
// null if there's no image), and any other necessary fields.
text.setText(tweet.getTweetText());
if (tweet.hasImage() /* function that returns whether or not there is an image */)
image.setVisibility(View.VISIBLE);
image.setImageBitmap(tweet.getImage()); // or however you are setting the image
else
// else just make the image invisible
image.setVisibility(View.GONE);
希望这能给你一个想法。
【讨论】:
【参考方案2】:另一种可能的解决方案是创建 2 个 xml 布局并在 RecyclerView 中使用 ViewType。
看看这个How to create RecyclerView with multiple view type?
【讨论】:
【参考方案3】:RecyclerView 支持不同的视图类型(布局),这在这种情况下是正确的方式。例如,
class MyAdapter : RecyclerView.Adapter<MyViewHolder>()
override fun getViewTypes(position:Int) =
if (mydata[position].hasImage) return R.layout.mylayout_with_image
else R.layout.mylayout_no_image;
override fun onCreateViewHolder(viewType:Int, parent:ViewGroup) : MyViewHolder =
// here viewType = layout id
MyViewHolder(layoutInflater.inflate(viewType, parent))
override fun onBindViewHolder(viewHolder:MyViewHolder, position:Int)
// guaranteed viewHolder.itemView is the view you want for that position
【讨论】:
(mydata[position].hasImage)
我有用户图片和帖子图片..【参考方案4】:
实现这种情况的简单方法是,您所要做的就是创建一个包含图像和文本的视图,在回收器适配器中检查图像数据是否可用,使图像的可见性可见,否则图像可见性消失。
第二种方法为RecyclerView
创建多个视图。
@Override
public void onBindViewHolder(ViewHolder holder, int position)
Log.d(TAG, "onBindViewHolder called");
ContentItem item = mContentItems.get(position);
if(item.getName()!=null)
holder.textName.setVisibility(View.Visible);
holder.textName.setText(item.getName());
else
holder.textName.setVisibility(View.GONE);
if(item.getPreviewImageDefault()!=null)
holder.imageIcon.setVisibility(View.Visible)
Picasso.with(mContext).load("file://" + item.getPreviewImageDefault()).into(holder.imageIcon);
else
holder.imageIcon.setVisibility(View.GONE)
【讨论】:
【参考方案5】:如果您想在图像为ic_launcher
时隐藏图像,您可以这样做(假设data.getImage()
将drawable 的id 作为整数返回):
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i)
if(mItems!=null)
AdapterData data = mItems.get(i);
viewHolder.text.setText(data.getText());
viewHolder.image.setImageResource(data.getImage());
if(TextUtils.isEmpty(data.getText()))
viewHolder.text.setVisibility(View.GONE);
else
viewHolder.text.setVisibility(View.VISIBLE);
if(data.getImage()==R.drawable.ic_launcher)
viewHolder.image.setVisibility(View.GONE);
else
viewHolder.image.setVisibility(View.VISIBLE);
【讨论】:
以上是关于Recyclerview:如何将一些帖子与图像和没有图像混合? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Recyclerview 中显示图像 - Recyclerview 图像显示错误