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图像捕捉与大图像中间

如何在 Recyclerview 中显示图像 - Recyclerview 图像显示错误

如何在向上滚动时清除 RecyclerView 中的列表

如何将图像添加到AdapterClass中的RecyclerView?

将 RecyclerView 与 FirestoreRecyclerAdapter 一起使用时如何设置滚动位置?