android - RecyclerView 和 Picasso 图像在滚动后消失

标签 android imageview android-recyclerview android-imageview picasso

我没有找到答案here , herehere .

我有一个显示帖子列表的 Activity (有或没有图像)。当我使用 SwipeRefreshLayout 向下滚动并向上滚动或刷新列表时一些图像可能会消失。我用 RecyclerView显示帖子列表和Picasso加载图像。这是我的适配器绑定(bind):

@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    // <...>
    if (item.getPhoto() != null) {
        Picasso.with(context)
                .load(item.getPhoto())
                .into(holder.mPostPhoto);
    } else {
        holder.mPostPhoto.setImageDrawable(null);
        holder.mPostPhoto.setVisibility(View.GONE);
    }
}

我发送 HTTP 请求以获取帖子,当我有新数据时,我调用 PostsAdapter :
public void addAll(List<PostResponse> items) {
    this.items.clear();
    this.items.addAll(items);

    notifyDataSetChanged();
}

在 MainActivity 中:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // <...>
    mPostAdapter = new PostAdapter();
    mPosts.setLayoutManager(new LinearLayoutManager(MainActivity.this));
    mPosts.setAdapter(mPostAdapter);

    mPostsSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            updatePosts();
        }
    });

    updatePosts();
}

private void updatePosts() {
    new Api(this).getPosts(new GetPostsCallback(this) {
        @Override
        public void onSuccess(final Paging<PostResponse> paging) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mPostAdapter.addAll(paging.getData());
                    mPostsSwipeRefresh.setRefreshing(false);
                }
            });
        }
    });
}

我觉得这很基本,我不明白为什么图像会一次又一次地消失。我的列表不长,并且在上传到服务器之前调整了图像大小,它们不应该使用太多内存。最糟糕的是,当它们消失时,它们不会重新加载。只有在我向下和向上滚动后,它们才能重新加载...
  • 请解释一下为什么会这样。
  • 我该如何解决这个问题?

  • 谢谢!

    最佳答案

    我也遇到了这个问题,但不想禁用回收。我发现通过将 ImageView 可见性显式设置为 View.VISIBLE在调用 picasso 之前,即使在滚动之后也会加载图像:

    holder.image.setVisibility(View.VISIBLE);
    Picasso.with(context)
        .load(imgUrl)
        .into(holder.image);
    

    关于android - RecyclerView 和 Picasso 图像在滚动后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40441176/

    相关文章:

    android - 单击按钮更改 ImageView

    android - 无法从 Firebase DB 填充回收器 View

    安卓 TabLayout : distribute evenly

    java - 如何将两个字符串和一个 List<byte[]> 聚合为一个 byte[],然后提取它们

    java - 让 AlertDialog 等待用户输入?

    java - 无法在Android上使用imageview显示图像

    android - 在Android中使用Path和RectF在左上角右下角左下角绘制圆角

    javascript - 使用WebView在现场调用JS

    android - 在 RecyclerView 上设置最大高度

    android - 无法在多个选项卡中使用回收器 View