Sobes.tech
Junior — Middle

Фарқи байни усулҳои areContentsTheSame ва areItemsTheSame дар синфи DiffUtil ва барои чӣ лозиманд?

sobes.tech AI

Ҷавоб аз AI

Дар синфи DiffUtil дар Android, ду методи калидӣ барои муқоиса кардани унсурҳои рӯйхат мавҷуданд:

  • areItemsTheSame — санҷида мешавад, ки оё ду объект намояндаи як унсури ҳамон аст (масалан, агар онҳо идентификатори беназири якхела дошта бошанд). Ин метод ба савол ҷавоб медиҳад: "Оё ин ҳамон объект дар рӯйхат аст?".

  • areContentsTheSame — санҷида мешавад, ки оё мазмуни ду объект баробар аст, яъне маълумоти онҳо якхела аст. Агар объектҳо ҳамчун унсоли якхела ҳисобида шаванд (areItemsTheSame true баргардонад), ин метод муайян мекунад, ки оё маълумоти он унсур тағир ёфтааст.

Ин барои чӣ аст? DiffUtil ин методҳоро истифода мебарад, то RecyclerView-ро самаранок навсозӣ кунад, шумораи дубора ранг кардани онро кам кунад. Агар areItemsTheSame false баргардонад, унсур нав ҳисобида мешавад. Агар true бошад, аммо areContentsTheSame false баргардонад, маънои онро дорад, ки унсур тағир ёфтааст ва бояд нав карда шавад.

Масалан:

override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
    return oldList[oldItemPosition].id == newList[newItemPosition].id
}

override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
    return oldList[oldItemPosition] == newList[newItemPosition]
}