【问题标题】:Images disappear after 11th item in RecyclerView图像在 RecyclerView 中的第 11 项后消失
【发布时间】:2018-05-30 13:29:21
【问题描述】:

我创建了一个包含 CardView 的 Firebase RecyclerView。 CardView 内部有一个 ImageView 和一个 TextView。如果图像连同其描述(TextView)一起上传,那么 ImageView 和 TextView 都是可见的,否则只有 TextView 是可见的。问题是,当 RecyclerView 包含超过 11 个项目时,ImageViews 会自动消失,只有 TextViews 可见。不知道为什么会这样。 下面是代码:

public class MainView extends 
    AppCompatActivity {
    private RecyclerView mPlacelist; protected void onCreate(Bundle SavedInstanceState) {
    super.onCreate(SavedInstanceState); mPlacelist= (RecyclerView) findViewById(R.id.Place_list); mPlacelist.setHasFixedSize(true);

LinearLayoutManager mLayoutManager=new LinearLayoutManager(MainView.this); mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true); mPlacelist.setLayoutManager(mLayoutManager); } public static class  MainViewHolder extends RecyclerView.ViewHolder {
    View mView;


    public MainViewHolder(View itemView,int viewType) {
        super(itemView);
        mView = itemView;


    }
    public void setDescription(String description) {
        TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
        post_desc.setText(description);
    }

    public void setImage(final Context ctx, final String image) {
        ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
        //If image exist
        if (image != null) {

            Picasso.with(ctx).load(image).fit().centerInside().into(post_image);

        } else if (image == null) {

           //no image then imageview invisible
            Picasso.with(ctx).cancelRequest(post_image);
            post_image.setVisibility(View.INVISIBLE);
            post_image.setVisibility(View.GONE);

        }
    }

   }

final FirebaseRecyclerAdapter<MainBlogView, MainView.MainViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<MainBlogView, MainView.MainViewHolder>(
        MainBlogView.class, R.layout.recyclerplace, MainView.MainViewHolder.class, databaseReference ) {
    @Override
    protected void populateViewHolder(final MainView.MainViewHolder viewHolder, MainBlogView model, int position) {





       viewHolder.setDescription(model.getDescription());
        viewHolder.setImage(getApplicationContext(), model.getImage());
        viewHolder.setTimestamp(model.getTimestamp());

}  @Override
        public int getItemViewType(int position) {

            return super.getItemViewType(position);
        }

    };
    firebaseRecyclerAdapter.notifyDataSetChanged();
    mPlacelist.setAdapter(firebaseRecyclerAdapter);



} }

感谢任何帮助。谢谢

【问题讨论】:

  • 你有没有试过评论这行代码mPlacelist.setHasFixedSize(true);
  • 是的,我做到了.. 但这样做会完全删除图像视图,而不管其位置如何。 @Alex Mamo
  • 当您删除或修改以下行 Picasso.with(ctx).cancelRequest(post_image); post_image.setVisibility(View.INVISIBLE); post_image.setVisibility(View.GONE); 时会发生什么?我的猜测是第 12 张图像实际上是空的,然后您在该块中的代码使所有未来的图像视图不可见?
  • @YodaScholtz 如果我删除这些行,那么我将为 imageview 获得一个空白空间,因为其中没有图像。
  • @YodaScholtz 如果是这种情况如何解决这种奇怪的情况?

标签: android firebase firebase-realtime-database android-recyclerview firebaseui


【解决方案1】:

代替这段代码:

if (image != null) {

        Picasso.with(ctx).load(image).fit().centerInside().into(post_image);
}

使用这个:

if (image != null) {

        post_image.setVisibility(View.VISIBLE);
Picasso.with(ctx).load(image).fit().centerInside().into(post_image);

    }

您收到此“错误”是因为您的第 12 行没有图像并且您的代码将其隐藏,并且 RecyclerView 重用这些行以提高性能。

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多