RecyclerView.Adapter의 성능을 높이거나 또는 같은 이유지만 Paging Component를 쓰는경우 DiffUtil.ItemCallback을 반드시 구현해야 합니다.
보통 Adapter내에서 Inner class로 구현하거나 Outer로 빼서 생성자 파라미터로 OldItem과 NewItem을 제공해야합니다.
boolean areItemsTheSame(oldItem, newItem) 를 통해 이젠 아이템과 새로운 아이템의 ID가 같은지 비교한 뒤 같은 경우 내부에서 boolean areContentsTheSame(oldItem, newItem) 을 다시 호출하여서 객체의 필드가 같은지 비교할 수 있습니다. 만약areItemsTheSame이 false를 반환하면 areContentsTheSame는 호출되지 않습니다.
private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK =
new DiffUtil.ItemCallback<Concert>() {
@Override
public boolean areItemsTheSame(Concert oldItem, Concert newItem) {
// 이것에서 이전 아이템과 새로운 아이템이 같은지 비교하기 위해 고유 식별자를 비교 합니다.
return oldItem.getId() == newItem.getId();
}
@Override
public boolean areContentsTheSame(Concert oldItem, Concert newItem) {
// 이곳에서는 "==" 연산자를 사용하지 않습니다. 대신 .equals()를 사용합니다.
// 또는 두 객체를 비교할 수 있는 로직을 이곳에 작성 하여 리턴하도록 합니다.
return oldItem.equals(newItem);
}
};
0개의 댓글