【发布时间】:2016-11-05 17:30:09
【问题描述】:
我有一个显示帖子列表的活动(有或没有图片)。当我使用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);
}
});
}
});
}
我觉得这很基本,我不明白为什么图像会一次又一次地消失。我的列表不长,并且在上传到服务器之前调整了图像大小,它们不应该使用太多内存。最糟糕的是,当它们消失时,它们不会重新加载。只有在我向下和向上滚动后,它们才可能重新加载...
- 请解释一下为什么会这样。
- 如何解决此问题?
谢谢!
【问题讨论】:
-
很难说为什么您发布的代码会发生这种情况。你能再分享一点吗?毕加索有什么具体的配置政策吗?
-
@Blackbelt 请查看更新。我没有任何特定的配置。很基础:从服务器获取帖子,每个帖子都有图片url,使用picasso通过url将图片加载到ImageView。
-
看起来不错 - 如果您登录
item.getPhoto()? -
@Blackbelt 我检查了
item.getPhoto()它在那里......
标签: android imageview android-recyclerview android-imageview picasso