4 回答

TA貢獻1804條經驗 獲得超2個贊
假設您的適配器有一個私有字段mItems
和一個如下所示的公共方法
public void setItems(List<YourClass> items){ mItems= items; notifyDataSetChanged(); }
調用此方法將刷新您的回收站視圖。或者,您可以像這樣簡單地通知您的適配器:
yourAdapterInstance.notifyDataSetChanged();

TA貢獻1884條經驗 獲得超4個贊
DiffCallback 的實現工作不正常:
@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) {
還需要在發送更新之前更新列表。
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:代碼可能無法正常工作,將顏色更改為綠色可能會影響回收的“未更新”項目。最好通過將編輯/更新的信息添加到模型來更改 RepeaterModel。

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

TA貢獻1810條經驗 獲得超5個贊
您應該將 notifyItemChanged() 與自定義對象一起使用,而不是 notifyDatasetChanged。
創建數據類說 UpdateRecord 有 2 個成員
data class UpdateRecord(val _name : String? , val _rssi :String?)
當 rssi 變化時,調用 Adapter 的
notifyItemChange(position, UpdateRecord(null, newRssi))
您將收到 onBindViewHolder(position, payload) 調用,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中的部分更新機制,只更新發生變化的部分。
添加回答
舉報