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개의 댓글