Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ar vr 차이
- 서비스 vs 쓰레드
- android retrofit login
- 큐 자바 코드
- jvm이란
- 안드로이드 레트로핏 사용법
- 안드로이드 유닛 테스트
- 안드로이드 os 구조
- ANR이란
- 2022 플러터 안드로이드 스튜디오
- 객체
- android ar 개발
- 클래스
- Rxjava Observable
- 안드로이드 라이선스 종류
- 스택 자바 코드
- rxjava disposable
- 스택 큐 차이
- 안드로이드 유닛테스트란
- 안드로이드 라이선스
- jvm 작동 원리
- 멤버변수
- rxjava hot observable
- rxjava cold observable
- 2022 플러터 설치
- 서비스 쓰레드 차이
- 안드로이드 레트로핏 crud
- 플러터 설치 2022
- 자바 다형성
- 안드로이드 유닛 테스트 예시
Archives
- Today
- Total
나만을 위한 블로그
[Android] 리사이클러뷰 스크롤 중 데이터가 변경될 때 현재 위치를 유지하는 방법 본문
728x90
반응형
페이징 또는 TimerTask 등을 통해 메서드를 반복호출한 다음, 메서드 리턴값을 리사이클러뷰에 보여주고 notifyDataSetChanged()를 호출할 경우 스크롤이 맨 위로 올라갈 수 있다.
이번 포스팅에선 페이징해서 새 데이터를 가져오거나 리사이클러뷰 안의 데이터들이 바뀌더라도 현재 스크롤 위치를 유지하는 방법에 대해 포스팅하려 한다.
1. 먼저 액티비티/프래그먼트의 전역 변수로 아래를 선언한다.
private Parcelable recyclerViewState;
2. 그리고 어댑터 초기화 코드의 이전 부분에서 아래와 같이 사용한다. 프래그먼트에서 사용했기 때문에 context로 getActivity()를 넘겼지만 액티비티에서 사용한다면 MyActivity.this 등을 넘기면 될 것이다.
// 순서는 상관없을지도 모르지만 내 경우 이렇게 하면 작동했기 때문에 그냥 이렇게 쓰는 것이다
recyclerViewState = myRecyclerview.getLayoutManager().onSaveInstanceState();
adapter = new MyAdapter(getActivity(), firstList, secondList);
당연한 거지만 myRecyclerview에는 자신이 만든 리사이클러뷰의 참조 변수명을 넣어주면 된다. 저거 그대로 따라해놓고 왜 안되냐고 한다면 난 할 말이 없다.
3. recyclerViewState를 리사이클러뷰에 붙인다. 이 코드는 setAdapter 이후에 호출한다.
myRecyclerview.setAdapter(adapter);
myRecyclerview.getLayoutManager().onRestoreInstanceState(recyclerViewState);
이제 테스트해보면 스크롤 도중 페이징이나 notifyDataSetChanged()를 호출해 데이터가 바뀌더라도 현재 스크롤한 위치가 바뀌지 않을 것이다.
반응형
'Android' 카테고리의 다른 글
[Android] 의존성 주입(Dependency Injection)이란? (0) | 2021.09.18 |
---|---|
[Android] LiveData의 postValue() vs setValue() (0) | 2021.09.10 |
[Android] Rxjava와 Retrofit 같이 사용하는 법 (0) | 2021.08.04 |
[Android] 레트로핏 사용 시 Expected a string but was BEGIN_OBJECT at line 1 column 2 path $ 에러 해결 (0) | 2021.08.04 |
[Android] 레트로핏으로 네이버 검색 API 사용하는 법 (0) | 2021.08.04 |
Comments