1. 程式人生 > >recycleview複用導致資料錯亂解決的3種方法

recycleview複用導致資料錯亂解決的3種方法

這是網上貼上的一張圖片


1.第一種簡單粗暴,直接在viewholder設定如下程式碼即可,但效能可能大打折扣

innerFragmentMyOderByViewHolder.setIsRecyclable(false);

2.第二種,推薦使用,在需要使用的viewholder 中對使用到的實體bean增加需要設定的狀態欄位,如user 中booeal ischeck=false,當點選該item中改變ischeck的值為true,在資料賦值的時候先判斷是否選中,然後在設定不同狀態。

 例項:

//點選的時候改變欄位的值
public void onItemChildClick(BaseQuickAdapter adapter
, View view, int position) { //複用後狀態錯亂.需要點選對應item的關注改變狀態 TextView tvNotFocus = view.findViewById(R.id.tv_related_theme_recommended_focus);//預設未關注 String focus = tvNotFocus.getText().toString(); List<TopicRelatedRecommendedBean> data = getData(); TopicRelatedRecommendedBean topicRelatedRecommendedBean = data.get(position)
; boolean select = topicRelatedRecommendedBean.isSelect(); Log.d(TAG, "1145= "+select); if (view.getId() == R.id.tv_related_theme_recommended_focus) { topicRelatedRecommendedBean.isAttention = !topicRelatedRecommendedBean.isAttention; notifyDataSetChanged(); } } //填充資料的時候判斷
@Override public void onBindViewHolder(RecyclerHolder holder, int position) { List<TopicRelatedRecommendedBean> data = getData(); TopicRelatedRecommendedBean topicRelatedRecommendedBean = data.get(position); holder.tvNotFocus.setText(topicRelatedRecommendedBean.isAttention ? "關注" : "已關注"); holder.tvNotFocus.setBackgroundResource(topicRelatedRecommendedBean.isAttention ? R.drawable.topic_already_focus_shape : R.drawable.release_button_shape); }

3.這三種是自己的做法,暫時還沒發現bug,也合適那些不想寫那麼複雜,效能還可以,可以試試,我這種直接在複用時對item中需要改變的狀態進行處理,不管什麼條件下,只要不同滿足條件就對控制元件進行不同的對應狀態即可。如已選中狀態設定後,在對應的條件下也設定未選中即可。,嚴格來說就是if else一定要準確,否則造成資料錯亂很容易,不要只寫if而不寫else

相關推薦

recycleview導致資料錯亂解決3方法

這是網上貼上的一張圖片1.第一種簡單粗暴,直接在viewholder設定如下程式碼即可,但效能可能大打折扣innerFragmentMyOderByViewHolder.setIsRecyclable(false);2.第二種,推薦使用,在需要使用的viewholder 中對

ListView導致圖片錯亂及閃爍問題

關於ViewHolder複用,我就不說明了,關鍵是複用導致出現的問題 網路的好壞,我們請求的圖片並不是很穩定,那麼我們假設一屏可以顯示6條資料,利用複用,我們的第7條資料view就是我們的第1條資料view,隨之手勢不斷的滑動,複用的問題,就出現,特別是上

本人原創!解決安卓ListView問題最簡單的兩方法

        ListView在安卓很多地方需要用得到,其實listview是基於MVC架構設計的,即資料model,檢視view和控制器controller。安卓已幫我們寫好該框架,我們只需往裡

ListView 導致 CheckBox 選中狀態錯亂

在ListView巢狀CheckBox 等一些有標記的View時,如果不做處理,在ListView 滑動的時候, 會造成View的選中狀態錯亂。 比如: 可以看到 剛開始選中了demo2 和demo3。滑動到下一頁的時候,demo10 和demo11 也被選中。 當然要解決

解決RecyclerView導致圖片錯位的問題

繼上一篇部落格之後我發現在百度搜索排名第二條,想想還有些小激動呢。咳咳咳~~~,廢話少說,趕緊把我遇到的一個問題記錄下來,以便別人採坑或者自己在採坑。 問題描述:從服務端拿到一個type來展示來展示本地不同type的圖片,但是我發現了一個錯位問題,程式碼如下: switc

iOS tableview做多選避免導致的顯示錯亂問題

需求:用tableview做選擇框,選中打勾,可單選、多選、全選、全不選等。需要在一堆複用的自定義cell中 點選一個cell 在當前cell顯示選中按鈕如果單純的在cell裡新增Btn再在didselect方法中去修改按鈕狀態,那麼就會出現別的cell中也出現了一個選中的按

RecyclerView+checkbox滑動導致混亂問題的解決方案

最近做一個專案,裡面遇到了一個小問題吧我覺得這些問題也是我們時常會用到的。我們需要在使用者新註冊的時候為他推薦一些人來選擇關注。用到了RecyclerView 那麼在RecyclerView的Adapter裡面用到的是checkbox讓使用者有選擇的進行關注,當列表足夠多的

伺服器資料恢復通用方法/伺服器硬碟故障導致資料丟失解決方案

[伺服器資料恢復原因推斷] 伺服器資料丟失情況很多,通常無法明確伺服器資料丟失的原因,常見的丟失原因有:伺服器硬碟出現故障,管理員或者伺服器自動進行fsck操作,這一操作可能造成更加嚴重資料丟失或者導致伺服器資料恢復的難度增加。伺服器資料丟失後執行mkfs操作,若操作未完成則容易導致部分塊組全部

HTTP協議篇(一):多路資料

管道機制、多路複用 管道機制(Pipelining)  HTTP 1.1 引入了管道機制(Pipelining),即客戶端可通過同一個TCP連線同時傳送多個請求。如果客戶端需要請求兩個資源,以前的做法是在同一個TCP連線裡面,先發送A請求,然後等待伺服器做出迴應,收到後再

RecyclerView的導致的多選混亂

先看圖 點選第一條和第二條,後面的第24條和25條也被選上了。這個問題是recyclerview的item複用導致的。具體原因我正在看,解決辦法如下。 首先,主頁面的佈局就只有一個recyclerview。 <?xml version="1.

Redis持久化--Redis宕機或者出現意外刪庫導致資料丟失--解決方案

echo編輯整理,歡迎轉載,轉載請宣告文章來源。歡迎新增echo微信(微訊號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!! Redis持久化的方案其實是很多人接觸的比較少的,因為相對應的資料故障不會很多,一次初始化的設定就能保證後續故障

戶最討厭的3UI設計方法

以下內容由Mockplus團隊翻譯整理,僅供學習交流,Mockplus是更快更簡單的原型設計工具。 註意:本文中提到的設計方法在不同設計場景帶來的效果是不一樣的,並不能說是好的或不好的。 這意味著,如果你正確執行,它們都具有很大的潛力。

jQuery來綁定事件的3方法和區別

委托 images 不同的 doc mage his ges utf htm 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF

Vue來進行移動Hybrid開發和客戶端間資料傳輸的一方法

如果大家覺得有用,更多的模組請點選檢視 即上一篇Vue 頁面狀態保持頁面間資料傳輸的一種方法,今天我們說說我們團隊是怎麼和客戶端進行互動。 為什麼到了今天,還要提hybrid開發,就我所在團隊從中獲得的好處有: 團隊較小、業務較重、迭代頻繁、需要緊急響應的團隊和專案比較適合用 使用單頁應用技術

3方法交換兩個整數(不建立臨時變數)+輸出一組資料最大值+簡單排序+最大公約數

交換兩個整數: 第一種: int a = 6; int b = 8; int t = 0; t = a; a = b; b = t; printf("a = %d b = %d\n", a, b); 後兩種不建立臨時變數 第二種: int a = 6; int

C++工作筆記-3方法資料型別進行拆分(可用於各種協議)

比如用Long Long存3個數據的內容。 這裡要知道大小端的知識點。 方法一是用位運算; 方法二是用指標; 方法三是結構體(本質上也是指標); 執行截圖如下: 原始碼如下: main.cpp #include <iostream> using

100份PDF轉換Word,Word轉PDF,3方法幫你一鍵解決

100份PDF轉換Word,Word轉PDF,3種方法幫你一鍵解決!相信大家在辦公時候偶爾會將檔案之間進行相互轉換,如果這時候領導突然給你100風PDF檔案,讓你幫他轉換成Word,你該如何是好呢?剛入職場的你肯定是一臉懵逼!那麼今天在這裡為大家整理了3種方法,幫你一鍵解決! 方法1:複製貼上法

PHP使用3方法實現資料採集

什麼叫採集? 就是使用PHP程式,把其他網站中的資訊抓取到我們自己的資料庫中、網站中。 PHP製作採集的技術: 從底層的socket到高層的檔案操作函式,一共有3種方法可以實現採集。 1. 使用so

Mybatis 傳入多個引數查詢資料 (3方法)

據我目前接觸到的傳多個引數的方案有三種。 第一種方案   DAO層的函式方法 public User selectUser(String name,String area); 對應的Mapper.xml  <select id="selectUser" result

Java-讀取某個目錄下所有檔案、資料夾和3從檔案路徑中獲取檔名的方法

1 讀取某個目錄下所有檔案、資料夾 public static ArrayList<String> getFiles(String path) { ArrayList<Str