마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ListView scroll 위치 기억하기.

0 추천
안녕하세요 ListView를 구현했씁니다.

 

Activity와 Adapter와 Service class

 

Activity에서 Service에 리스트 목록을 요청보내서 응답이 오면 응답을 핸들러로 받아 List에 넣어주고

서비스 connection이 될 때

set Adapter 시키는 로직입니다..

 

리스트에서 새로고침 버튼이 있어서 누를 때 마다 서비스에 요청을 보내서 그때그때 정보를 받아오거든요

그럼 자꾸 리스트가 맨 위로가져요

 

액티비티가 숨었다가 나타날 때에도 다시 위로가고

 

카톡 친구목록처럼 제가 보던 위치를 기억해서 그쪽으로 이동할 수 있는 방법좀 알려주세욤..^^
윤둥이 (4,560 포인트) 님이 2013년 7월 3일 질문
윤둥이님이 2013년 7월 3일 수정

1개의 답변

+1 추천
 
채택된 답변

리스트를 갱신하는데 위치를 기억 하신 다는 말씀이 무언가 애매합니다...

리스트 갱신은 데이터가 바뀌었기에 리스트 순서도 바뀌는거라고 보면 위치를 기억해서 그위치에 간다고 한들 원하는 데이터가 그 위치에 없다고 봐야하는데...

뭐 원하시는 기능 자체는 쉽게 구현 가능합니다.

현재 화면에 보이는 첫번째 아이템 넘버를 가져와 저장하고 그 아이템으로 이동 하면 됩니다.

int pos = ListView.getFirstVisiblePosition(); <<====새로고침 직전에 부르면 되겠죠?

ListView.setSelection(pos);  <<==== 새로고침후 부르시면 됩니다.

ThisPlus (46,920 포인트) 님이 2013년 7월 3일 답변
윤둥이님이 2013년 7월 3일 채택됨
아 죄송합니다 제가 질문을 이상하게 했네요

전체 목록은 그대로고 그 목록들의 상태가 바뀌는겁니다

실시간으로 접속자를 판별해내기 힘들기 때문에
새로고침 할 때 마다 리스트의 접속자들이 바뀝니다.

index = mListView.getFirstVisiblePosition();
            View v = mListView.getChildAt(0);
            top = (v == null) ? 0 : v.getTop();

mListView.setSelectionFromTop(index, top);

refesh 전에 위에꺼 하고

새로 들어올 때 아래꺼 했는데도 맨 위로 갑니다..

제 생각에는 그 index가 저장이 안되는 듯 합니다.
mListView.setSelectionFromTop(index, top);
이 함수를 제 함수로 바꾸어 줘보세요~!
mListView.setSelection(index);
요로케요~~!
그럼 top은 설정해 줄 필요가 없다는건가요?

그리고 각각 셋팅되고 불러지는 곳이 다르기때문에

index를 private 클래스 변수로 선언했는데 상관이 없는지요.,.?
네~~! 탑의 정의는 필요 없습니다.

인덱스의 접근변경자를 private로 주셧단 말씀 이신가요???

별다른 상관은 없을 것으로 사료 됩니다.~!
감사합니다 많은 도움이 됐습니다.

참고로 top을 설정해 주지 않으니 한칸 아래로 가더군요~

setSelectionFromTop(pos,top)을 해주는게 맞는 것 같습니다 ^^

감사합니다.
...