2015-12-22 5 views
0

У меня есть один простой адаптерPicasso + RecycleView вставить изображение в неверном зрения

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)); 

Теперь Im Calling мой REST API, чтобы получить данные и первый время, когда это работает, все, где это должно быть (скажем, в c есть только 2 элемента, а порядок - conv1 и conv2)

Но ... теперь, если я обновляюсь, например, и данные в Списке идут в другом порядке (conv2, а затем conv1) после того, как адаптер.notifyDataSetChanged(), оба из моего imageView в списке имеют одинаковые изображения ..! Но TextView однако имеет право текст

Это происходит только с точки зрения заполненного с Пикассо и не может понять, почему

Может кто-нибудь помочь мне в этом?

+0

Я только что попробовал, и если я удалю нулевую проверку (я положил ее, потому что иначе picasso помещал пустое изображение), и вместо этого я использую .error (..). PlaceHolder (..), что неправильного поведения не произошло – Johny19

+0

Вы определили пустой диалог «ПерепискаListAdapter.ViewHolder», но ваш класс адаптера напечатал для Conversation.ViewHolder. Что там? Что вы делаете в onCreateViewHolder? – DmitryBorodin

+0

нормальный материал, findById и т. Д. – Johny19

ответ

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

+0

Да решение 1 было моим временным обходным решением, но не было уверенно, было ли целесообразным повторно устанавливать адаптер каждый раз. не пытались решить 2, но тот факт, что я делаю items.clear (это те же самые элементы, которые я передаю в конструкторе), не будет ли это иметь тот же эффект, что и решение 2? – Johny19

+0

Я использую всегда второе решение, но в вашем случае, если вы хотите использовать одну и ту же переменную 'items', вы должны добавить' adapter.setList (items) 'after' items.addAll (c)', потому что адаптер, который он хранит самостоятельно старая переменная. Не забудьте принять ответ, если он полезен, может помочь другим :) – Context

2

Вы используете, если условие в любом адаптере вы также должны установить еще часть его. Я также не знаю точно, почему это происходит, если при условии, что условие принимает такое же условие для ребенка, которое не соответствует этому, может быть ошибкой в ​​android. пожалуйста, попробуйте еще часть его. может быть, эта работа для вас.

+0

Я могу попробовать, но я думаю, что вы, возможно, были правы, мне нужно установить другое, если я использую, если иначе viewImage останется таким же, как это было до обновления (хотя я использовал notifiyDataSetChanged с пустыми элементами) – Johny19

+0

да, вы получили правильный текст, потому что нет никакого условия с текстом, поэтому его изменение для каждого ребенка, но в представлении изображения вы даете условие для нескольких, так что ребенок получил старую ссылку и установите неправильное изображение или удалите его. – Ankur1994a

 Смежные вопросы

  • Нет связанных вопросов^_^