2015-12-22 20 views
0

我有一個簡單的適配器現在畢加索+ 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)); 

現在我正在打電話給我的REST API來獲取數據和第一它的工作原理一切都應該在哪裏(比方說,在c中只有2件物品,訂單是conv1和conv2)

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

但是......現在如果我刷新例如,在列表中的數據進來後adapter.notifyDataSetChanged()我都在列表中的ImageView具有相同的畫面..不同的順序(CONV 2,然後CONV 1)!但是TextView的但是有正確的文本

這僅與View充滿了畢加索的發生,不明白爲什麼

有人能幫助我嗎?

+0

我剛纔想,如果我刪除空校驗(我把它放在否則畢加索是把一個空白圖像),而是我用.error(..)。佔位符(..)是錯誤的行爲不happend – Johny19

+0

您定義了空ConversationListAdapter.ViewHolder,但您的適配器類是爲Conversation.ViewHolder鍵入的。那裏有什麼?你在onCreateViewHolder中做什麼? – DmitryBorodin

+0

正常的東西,findById等.. – Johny19

回答

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)方法

+0

是的解決方案1是我的臨時解決方法,但不確定是否每次重新設置適配器是好的做法。沒有嘗試解決方案2,但是我做了items.clear(這與我在構造函數中傳遞的項目相同)的事實不會與解決方案2具有相同的效果嗎? – Johny19

+0

如果你想使用你必須添加'adapter.setList(項目)同一'items'可變我總是使用第二個解決方案,但在你的情況後''items.addAll(C)'因爲適配器它保持它自己的舊的「變量」。 不要忘了接受的答案,如果它是有用的力量可以幫助別人:) – Context

2

您使用,如果在任何適配器條件你也必須設置它在其他部分。我也不確切地知道爲什麼會發生這種情況,如果條件給出,它不符合此條件的孩子需要相同的條件,可能是Android中的錯誤。請嘗試其他部分。可能是爲你工作的。

+0

我可以試試,但我想你可能是對的,我需要設置一個別的,如果我使用if否則viewImage將保持相同它是刷新前(即使我用一個空項notifiyDataSetChanged) – Johny19

+0

是的,你得到了正確的文本,因爲有文字沒有條件所以它的每一個孩子,但在imageview的變化你給條件很少這樣子了年紀一個參考並設置不正確的圖像或刪除它。 – Ankur1994a