출처
: http://nicelee.egloos.com/m/3027648
: http://acholyte.tistory.com/entry/ListView-스크롤-위치-저장-및-복구
(안에 든거는 뭐냐구요?.. 아마 항암제...)
ListView를 일정 시간 간격으로 재로딩할 경우 스크롤 위치를 저장하고 복원할 필요가 있다.
1 2 3 4 5 6 7 8 9 10 11 | private void getListScrollInfo() { mPosition = mList.getFirstVisiblePosition(); View v = mList.getChildAt(0); if (v != null) mScrollY = ( int ) v.getTop(); else mScrollY = 0; Log.i( "mPosition" , "" + mPosition + "," + mScrollY); } |
1 2 3 | mList.setAdapter(adapter); mList.setSelectionFromTop(mPosition, mScrollY); |
Fragment에서 사용하는 예제~~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); getListScrollInfo(); outState.putInt( "position" , mPosition); outState.putInt( "scrolly" , mScrollY); } @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); if (savedInstanceState != null) { mPosition = savedInstanceState.getInt( "position" ); mScrollY = savedInstanceState.getInt( "scrolly" ); } } |
list의 scroll 위치 지정하기
setSelection(int position) 을 사용하면 원하는 position으로 scroll이 이동한다.
리스트 뷰 생성시 무조건 제일 아래로 스크롤이 이동하는 것 같다.
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
ListView 스크롤 위치 저장 및 복구
위의 링크의 두 번째 답변을 참고하여 다음과 같은 소스를 작성하면 된다.
Parcelable state; // 상태 저장 변수
...
public void onPause() { state = listView.onSaveInstanceState(); // 리스트뷰 스크롤 위치 저장 }
public void onResume() { if (state != null) { // 리스트뷰 상태가 있는 경우 listView.onRestoreInstanceState(state); // 리스트뷰 스크롤 위치 복구 } } |
'IT_Programming > Android_Java' 카테고리의 다른 글
[펌] Android 6.0 마시멜로 리뷰 (0) | 2015.10.29 |
---|---|
[펌] 리사이클러 뷰(RecyclerView) Header / Footer 붙이기 (0) | 2015.10.28 |
[펌] 구글 Advertising ID로 새롭게 시작. 그 변화에 맞춰 알아야 할 모든 것! (0) | 2015.10.23 |
안드로이드 6.0 마시멜로 런타임 권한 적용하기 (0) | 2015.10.21 |
Android 디바이스의 고유 번호 (Identifier) 획득 시 고려 해야 할 점 (0) | 2015.10.05 |