recyclerview内的图像是不可见的onscroll

时间:2018-01-05 09:17:46

标签: java android android-recyclerview

我试图读取是否有任何图像,如果图像为空,我将使明信片中的图像视图消失。如果没有,则使用Glide加载它。

第一次加载recyclerview时它可以正常工作。但是在一些卷轴之后,那些图像视图变得不可见(View.gone)

onBindViewHolder:

DataSnapshot d = topics.get(position);
    holder.text.setText(d.child("caption").getValue(String.class));
    if (d.child("type").getValue(String.class)!=null&&d.child("type").getValue(String.class).equals("image")){
        Glide.with(c).load(d.child("image").getValue(String.class)).placeholder(R.drawable.background).centerCrop().into(holder.image);
    }
    else{
        holder.image.setVisibility(View.GONE);
    }
    holder.name.setText(d.child("username").getValue(String.class));
    holder.category.setText(d.child("category").getValue(String.class));
    long millis = System.currentTimeMillis();
    long posttime = d.child("time").getValue(Long.class);
    long timedifference = millis-posttime;
    int days = (int) (timedifference / (1000*60*60*24));
    if (days<2){
        holder.time.setText("Today");

    }else {
        holder.time.setText(days+" days ago");

    }
    if (d.child("pic").exists()){
        Glide.with(c).load(d.child("pic").getValue(String.class)).placeholder(R.drawable.background).centerCrop().into(holder.pic);
    }

那我在哪里做错了?

3 个答案:

答案 0 :(得分:6)

当您将图像视图传递给Glide进行设置时,最好先在您的案例中设置可见性。

我们永远不知道滑动库更新会发生什么,以防它想要访问维度。特别是你在其他部分使用GONE,这与制作INVISIBLE略有不同。

if (d.child("type").getValue(String.class)!=null&&d.child("type").getValue(String.class).equals("image")){
      holder.image.setVisibility(View.VISIBLE);
        Glide.with(c).load(d.child("image").getValue(String.class)).placeholder(R.drawable.background).centerCrop().into(holder.image);

                }
                else{
                    holder.image.setVisibility(View.GONE);
                }

答案 1 :(得分:3)

试试这段代码:

if (d.child("type").getValue(String.class)!=null&&d.child("type").getValue(String.class).equals("image")){
      Glide.with(c).load(d.child("image").getValue(String.class)).placeholder(R.drawable.background).centerCrop().into(holder.image);
      holder.image.setVisibility(View.VISIBLE);
}
else{
      holder.image.setVisibility(View.GONE);
}
  

当您设置可见性时,它不会被它自己看到。   你需要在滑行加载图像时看到它并在图像时消失   是空的。

条件中添加holder.image.setVisibility(View.VISIBLE);

答案 2 :(得分:2)

RecyclerView第一次为第一个可见数据对象创建新视图,当您滚动加载其他项时,它会重新使用那些已滚动到顶部并再次为新数据项重用这些视图的视图。

因此,无论该视图的可见性状态是第一次创建的时间,它都将保留并将用于其他项目。

您需要做的是明确设置视图VISIBLE以再次显示它:

if (d.child("type").getValue(String.class)!=null&&d.child("type").getValue(String.class).equals("image")){
            holder.image.setVisibility(View.VISIBLE)
            Glide.with(c).load(d.child("image").getValue(String.class)).placeholder(R.drawable.background).centerCrop().into(holder.image);
            }
            else{
                holder.image.setVisibility(View.GONE);
            }