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

listview.notifydatasetchanged() 사용시 스크롤 위치 질문드립니다.

0 추천

listview.notifydatasetchanged() 사용하면 스크롤위치기 맨위로 올라가버리는데요.

현재 보고있는 위치에서 데이터만 갱신되거나 아니면 스크롤위치가 위로 올라가지 않게 할 수 있나요?

private View.OnClickListener bHandler = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(activity,"Button Click",Toast.LENGTH_SHORT).show();


            BusLocationThread busLocationThread = new BusLocationThread();
            busLocationThread.execute(LocUrl+busRouteId);

            adapter.notifyDataSetChanged();


        }
    };

 

우랴 (3,680 포인트) 님이 2014년 6월 3일 질문

1개의 답변

0 추천
notifyDataSetChanged 로는 scroll 이 되지 않습니다. 어딘가 adapter 를 재 설정하시는거 아닌지요?

그리고 asynctak 로 보이는데 asynctak 에 내용이 적용되기 전에 notifyDataSetChanged 불릴 코듭니다.

예상컨데 BusLocationThread 내에 adapter 를 다시 설정하지 않나 싶습니다.
aucd29 (218,390 포인트) 님이 2014년 6월 3일 답변
답변에 감사드립니다.
님 말씀대로 스레드안에 setAdapter(adapter)가 있으면 스크롤이 처음으로가더군요. 그래서 setAdapter(adapter)쪽에 if문을 걸어서 버튼클릭시에는 실행이 안되고adapter .notifyDataSetChanged()만 실행되게끔 하였습니다. 여기서 값은 스레드를 다시 실행시켜서 새로운 값을 가져오는데dapter.notifyDataSetChanged() 할 때 리스트뷰에 새로운값이 적용이 안되고 화면갱신도 안됩니다. 제가 원하는 기능은 새로고침 버튼을 누르면   새로운값이 리스트뷰로 넘어가서 사용자가 보고있는 위치에서 화면갱신이 되면서 기존 위치에 있던 이미지가 새로운 값 위치로 이동하는 모션을 보여주고싶습니다. 다시한번 좋은답변 부탁드리겠습니다.
asyncTask 에 onPostExecute 를 오버라이딩 하시고 거기다가 adapter.notifyDataSetChanged 호출하세요
호출할 adapter는 asyncTask 가 참조하고 있어야겠죠?
감사합니다 ^^ 해결했습니다.
...