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

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.