registerAdapterDataObserver를 어댑터에 연결해주면 된다. 데이터가 바뀌거나 제거되거나 새로 추가되거나 이동됐을 때를 알 수 있다.(onItemRangeChanged()는 다른 것들을 다 포함할 것 같지만 데이터가 제거되거나 할 때 호출되지는 않는다)
아래는 예시
Adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
super.onChanged();
notifyDataSetChanged();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
Log.d(TAG, "onItemRangeChanged " + itemCount);
int headerCount = getHeaderCount();
notifyItemRangeChanged(positionStart + headerCount, itemCount);
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
int headerCount = getHeaderCount();
notifyItemRangeInserted(positionStart + headerCount, itemCount);
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
Log.d(TAG, "onItemRangeRemoved " + "itemCount : " + itemCount);
int headerCount = getHeaderCount();
notifyItemRangeRemoved(positionStart + headerCount, itemCount);
}
@Override
public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
int headerCount = getHeaderCount();
notifyItemMoved(fromPosition + headerCount, toPosition + headerCount);
// TODO itemcount가 1일 경우이므로 1보다 크면 제대로 동작하지 않는다.
}
});
댓글