Picasso + RecycleView在错误的视图中插入图像

时间:2015-12-22 10:41:33

标签: android listview picasso mixed

我有一个简单的适配器

  public class ConversationListAdapter extends 

            RecyclerView.Adapter<Conversation.ViewHolder> {

                        private List<Conversation> items;
                        private Activity activity;
                        public ConversationListAdapter(Activity activity, List<Conversation>   items) {
                            super();
                            this. items = items;
                            this.activity = activity;
                        }

                        @Override
                        public void onBindViewHolder(ViewHolder viewHolder, int i) {
                            Conversation conversation = mItems.get(i);
                            viewHolder.name.setText(conversation.getName());
                             if ( conversation.getUrl() != null) {                 

         Picasso.with(activity.getApplicationContext()).load(conversation.getUrl())
                                        .into(viewHolder.imageView);
                                 }

                        }

                        and a basic 
                       class ViewHolder extends RecyclerView.ViewHolder  implements       View.OnClickListener {..}
                          }

现在一直在片段中:

mRecyclerView.setAdapter(new ConversationAdapter(getActivity(), mItems));

现在我打电话给我的休息api来获取数据,并且它第一次工作很棒,一切都应该在哪里(比方说c只有2项,顺序是conv1和conv2)

private void handleResult(List<Conversation> c) {
items.clear()
items.addAll(c)
adapter.notifyDataSetChanged()
}

但是......现在如果我刷新例子并且List中的数据以不同的顺序(conv2然后是conv1)在adapter.notifyDataSetChanged()之后,我列表中的imageView都有相同的图片.. !但是textView却有正确的文字

这只发生在充满毕加索的视图中,并且无法理解为什么

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

你在任何适配器中使用if条件你还必须设置其中的一部分。我也不知道为什么会发生这种情况,如果给出了条件,它对于与此不匹配的孩子需要相同的条件,可能是android中的错误。请尝试其他部分。可能是你的工作。

答案 1 :(得分:1)

您必须更换适配器中的项目或使用新项目

创建新适配器

第一个解决方案:

private void handleResult(List<Conversation> c) {
 mRecyclerView.setAdapter(new ConversationAdapter(getActivity(), c));
}

第二个解决方案:

private void handleResult(List<Conversation> c) {
 adapter.setList(c);
 adapter.notifyDataSetChanged();
}

不要忘记在setList(List<Conversation> c)

中创建Adapter方法