最近項(xiàng)目中遇到在列表中點(diǎn)贊预侯,刷新這個(gè)列表,item會(huì)閃動(dòng)的問(wèn)題峰锁。于是想到微信朋友圈點(diǎn)贊時(shí)萎馅,只是更新點(diǎn)贊的View,并不會(huì)重繪整個(gè)item虹蒋,后來(lái)找到了RecyclerView局部刷新的notifyItemChanged(int position,Object payload)方法
RecyclerView局部刷新notifyItemChanged(int position,Object payload),payload相當(dāng)于一個(gè)標(biāo)記 只要不為空 可以實(shí)現(xiàn)具體刷新到一個(gè)item中的指定view
/**
* 根據(jù) position 刷新某一個(gè)item
*
* @param position
*/
public void notifySomeoneItem(int position) {
//RecyclerView局部刷新notifyItemChanged(int position,Object payload),payload相當(dāng)于一個(gè)標(biāo)記 只要不為空 可以實(shí)現(xiàn)具體刷新到一個(gè)item中的指定view
notifyItemChanged(position,"payload");
}
重寫adapter中的onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads)方法
局部刷新到item中指定view糜芳,必須重寫該方法
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads) {
HouseResViewHolder viewHolder = (HouseResViewHolder) holder;
RecReadDataModel recommendedReadListModel = mList.get(position);
if (recommendedReadListModel == null) return;
if (payloads.isEmpty()) { //正常綁定數(shù)據(jù)邏輯
bindViewData(position, viewHolder, recommendedReadListModel);
} else { //刷新一個(gè)指定item中的點(diǎn)贊view 而不是重新渲染這個(gè)item中的所有view 解決了點(diǎn)贊時(shí)item閃動(dòng)問(wèn)題
//設(shè)置點(diǎn)贊狀態(tài)
setPraiseState(position, viewHolder, recommendedReadListModel);
}
}
如果payloads列表不是空的,你就可以在else代碼塊里面刷新你想更新的控件了(記得不需要更新的控件就不要寫在這里了)魄衅。
項(xiàng)目時(shí)間緊峭竣,需求都搞不贏,來(lái)不及看源碼晃虫。皆撩。。告辭