4 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個贊
假設(shè)您的適配器有一個私有字段mItems
和一個如下所示的公共方法
public void setItems(List<YourClass> items){ mItems= items; notifyDataSetChanged(); }
調(diào)用此方法將刷新您的回收站視圖?;蛘撸梢韵襁@樣簡單地通知您的適配器:
yourAdapterInstance.notifyDataSetChanged();

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個贊
DiffCallback 的實(shí)現(xiàn)工作不正常:
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return newList.get(newItemPosition).getMacdev()==oldList.get(oldItemPosition).getMacdev() ;
}
使用 equals 方法而不是 '=='
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return newList.get(newItemPosition).getMacdev().equals(oldList.get(oldItemPosition).getMacdev()) ;
}
此外, this.notifyItemChanged(position);從方法中刪除public void onBindViewHolder(CryptoViewHolder holder, int position, List<Object> payloads) {
還需要在發(fā)送更新之前更新列表。
public void setData(ArrayList<RepeaterModel> newData) {
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new
MyDiffUtilCallBack(newData, data));
data.clear();
this.data.addAll(newData);
diffResult.dispatchUpdatesTo(this);
}
PS:代碼可能無法正常工作,將顏色更改為綠色可能會影響回收的“未更新”項(xiàng)目。最好通過將編輯/更新的信息添加到模型來更改 RepeaterModel。

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個贊
您應(yīng)該只設(shè)置adapter
ie一次。并且在您要更改用于刷新列表的recylerview.setAdapter(adapter)
數(shù)據(jù)的任何其他地方。它只會刷新更改而不是整個列表。Arraylist
adapter.notifyDatasetChanged()

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個贊
您應(yīng)該將 notifyItemChanged() 與自定義對象一起使用,而不是 notifyDatasetChanged。
創(chuàng)建數(shù)據(jù)類說 UpdateRecord 有 2 個成員
data class UpdateRecord(val _name : String? , val _rssi :String?)
當(dāng) rssi 變化時,調(diào)用 Adapter 的
notifyItemChange(position, UpdateRecord(null, newRssi))
您將收到 onBindViewHolder(position, payload) 調(diào)用,payload 中的第一個對象是 UpdateRecord 對象。檢查并做
val updateRecord = payload[0] as UpdateRecord
if (updateRecord._name != null) {
// update name text view
}
if (updateRecord._rssi != null) {
// update rssi text view
}
這就是RecyclerView中的部分更新機(jī)制,只更新發(fā)生變化的部分。
添加回答
舉報