我有一个显示帖子列表的活动(带或不带图片)。当我向下滚动并向上滚动或使用SwipeRefreshLayout
刷新列表时,一些图片可能会消失。我使用RecyclerView
来显示帖子列表,并使用Picasso
来加载图片。以下是我的适配器绑定:
@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);
}
});
}
});
}
我觉得这很基础,不明白为什么图片会一次又一次地消失。我的列表并不长,图片在上传到服务器之前已经调整大小,它们不应该占用太多内存。最糟糕的是,当它们消失时,它们不会重新加载。只有在我向下滚动然后向上滚动后才会重新加载...
- 请解释一下为什么会出现这种情况。
- 我该如何解决这个问题?
谢谢!
item.getPhoto()
,看起来不错。 - Blackbeltitem.getPhoto()
,它在那里... - Andrei