RecyclerView局部刷新
在RecyclerView中,我們時常會用到局部刷新,我們大多數(shù)是使用:notifyItemChanged。
我在使用這個局部刷新過程中突然發(fā)現(xiàn)我有幾個notifyItemChanged沒有效果,我就在:
onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull List<Object> payloads)之中,看payloads是否有數(shù)據(jù),結(jié)果發(fā)現(xiàn)我自定義的payload并沒有傳過來!懵逼了,我在想是不是我在Recycler view中定義了兩種布局導(dǎo)致的。于是就去把兩種布局簡化了合并到一個Layout中,結(jié)果還是沒有效果,我后面在網(wǎng)上百度找到一篇很有作用的文章,他說:如果你在幾個payload傳值時如果之間有一個payload為null,payload就會清空。
文章在這:——》——》paylload為空;
于是我就把所有:adapter.notifyItemChanged(y,"a");//局部刷新,都加上字符,哪怕不需要加的我都大撒謊給你了雙引號,但還是沒有效果!!!炸裂!
后來我覺得可能是:adapter.notifyDataSetChanged();的原因,我就把這個刪除掉,重新運行并在重寫onBindViewHolder位置等傳回來的數(shù)據(jù)這一次就ok了,數(shù)據(jù)傳回來了,局部刷新終于實現(xiàn)了。
看效果:
1.準(zhǔn)備刷新的位置:
if (verUp.toString().trim().equals(ver+" 設(shè)備可更新!")){upAdapter.notifyItemChanged(y,"statuColor");//刷新payload為statuColor // itemChange.itemChange(y,"statuColor");}else { // itemChange.itemChange(y,"statu");upAdapter.notifyItemChanged(y,"statu");//刷新payload為statu的數(shù)據(jù)}2.重寫?onBindViewHolder獲取刷新數(shù)據(jù):
if (payloads.get(0).toString().equals("statu")){holder.runTime.setText(equipmentBean.getUptime());holder.statue.setText(equipmentBean.getStatus());holder.router_version.setText(equipmentBean.getVer());}else if (payloads.get(0).toString().equals("statuColor")){holder.runTime.setText(equipmentBean.getUptime());holder.statue.setText(equipmentBean.getStatus());holder.router_version.setText(equipmentBean.getVer());holder.router_version.setTextColor(Color.RED);}?3.傳過來的數(shù)據(jù)
?ok,可以局部刷新了!
?
總結(jié)
以上是生活随笔為你收集整理的RecyclerView局部刷新的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用ENVI5.3处理哨兵2数据保姆级教程
- 下一篇: 超融合挺进二级存储,华为与Commvau