일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- server
- 컴퓨터과학총론
- 자바
- 프래그먼트
- NGINX
- kakao
- caddy
- android
- java
- ubuntu
- 안드로이드
- error
- it
- mariadb
- 개발자
- Portfolio
- 개발
- 한글
- techEmpower
- javascript
- php
- C
- H2O
- C lanuage
- 번역
- 구글
- centOS7
- MySQL
- unity
- 해석
- Today
- Total
개발모음집
RecyclerView Paging 본문
페이징 소스를 찾다가 내가 리사이클러뷰를 구현한 방법과 이 예제가 리사이클러뷰를 구현한 방법이 비슷하여 이 예제로 페이징하기로 했다.
페이징은 성공, 다만 페이징이후 아이템을 클릭했을 때
java.lang.IndexOutOfBoundsException: Invalid index 16, size is 15
위와 같은 에러를 낸다.
리스트 사이즈를 더하지 않아서 문제인 것 같다. 소스를 찾아보자
@Override
public void onLoadMore() { // 새로 로드
Log.d("MainActivity_", "onLoadMore");
mAdapter.setProgressMore(true);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
itemList.clear();
mAdapter.setProgressMore(false);
start = mAdapter.getItemCount();
// end = start + 15;
getData(start, 15, naviBoardNo);
mAdapter.addItemMore(itemList);
mAdapter.setMoreLoading(false);
// Log.e("개수 확인", start + ", " + end);
}
}, 2000);
}
나는 itemList라는 ArrayList를 클리어해준다.
그 이유를 예를 들어 설명하자면, 20개의 글이 있고 5개씩 페이징을 한다고 가정했을 때
20번부터 16번까지 처음에 나오고 loadMore시 15번부터 11번까지, 또 하면 10번부터 6번까지, 5번부터 1번까지..
이런 식으로 로드해오는데 어레이리스트를 클리어해주지않으면, 15번부터 11번까지 나올 타이밍에
20번부터 11번까지 이어서 나온다.
어댑터에 데이터 갱신할 때 notifyItemRangeChanged만 있는 줄 알았는데 참고블로그를 보니 여러가지 종류가 있다.
notifyItemRangeInserted(itemList.size(), 15);
notifyItemRangeInserted를 사용하여 특정 범위에 추가하는 방식으로 하였다.
public void addItemMore(List<CommuItem> list) {
Log.e("listsize", list.size() + "");
for (int i = list.size() - 15; i < list.size(); i++) { // arrayList가 FIFO구조라서 index가 뒷 쪽인걸 가져와야함itemList.add(list.get(i));
}
Log.e("listsize", list.size() + "");
notifyItemRangeInserted(itemList.size(), 15); // http://gogorchg.tistory.com/entry/Android-RecyclerView-Adpater-Refresh, (positionStart, count)
}
'Android' 카테고리의 다른 글
TarsosDSP - AudioDispatcher start() status -38 error (0) | 2017.08.08 |
---|---|
fcm token 중복없이 저장하기 (0) | 2017.08.08 |
glide 대신 picasso 라이브러리 사용한 이유 (0) | 2017.08.08 |
ButtonBarSheet listview scroll issue (0) | 2017.08.08 |
Failure delivering result ResultInfo{who=null, request=65536, result=-1, data=Intent { (has extras) }} to activity error (0) | 2017.08.05 |