2012-03-19 4 views
1

사용자 지정 어댑터를 만들고 notifyDataSetChanged()를 호출 한 다음 데이터를 업데이트했습니다. 하지만 notifyDataSetChanged()를 호출 한 후에는 터치하여 목록보기의 스크롤을 멈출 수 없습니다. 나는 안드로이드의 소스 코드를 보면서 (의 ListView의 부모 인) 파일 AbsListView.class에서 그 코드ListView 스톱 스크롤이 작동하지 않습니다.

if (!mDataChanged) { ... } 

터치 이벤트에있는 ListView 스크롤을 중지 할 수있는 코드가 발견했다.

그러면 notifyDataSetChanged()를 호출하여 mDataChanged를 true로 설정하므로 스크롤을 중지 할 수 없습니다.

데이터 변경 후 스크롤을 중지하는 방법을 알려 드릴 수 있습니까?

답변

0

아마도 ListView가 getItem 메서드를 호출하는 동안 데이터를 읽는 것입니다. 비동기 데이터로드 (Handler)를 사용하는 것이 더 좋은 아이디어 일 수 있습니다. this answer에서 자세한 정보를 확인할 수 있습니다.

0

ListView의 스크롤 위치를 저장하고 목록을 새로 고친 후 다시 스크롤 할 때까지 목록을 스크롤해야합니다. 이렇게하려면

adapter.notifyDataSetChanged();

private void saveListScrollPosition() { 
     // save index and top position 
     index = _listview.getFirstVisiblePosition(); 
     View view = _listview.getChildAt(0); 
     top = (view == null) ? 0 : view.getTop(); 
    } 

전에이 메서드를 호출하고 adapter.notifyDataSetChanged();

다음 줄 쓰기 후 - 접근 가능한 모든 필드는, index, top_listview

// restore list scroll position 
    _listview.setSelectionFromTop(index, top); 

을 어떤 방법 으로든.

+0

왜 도움이 될 것이라고 생각하십니까? 때문에 코드 안드로이드 확인 (! mDataChanged) {...} (그러나 나는 당신의 코드를 tryid했습니다 그리고 그것은 도움이되지 않았다) – karabara

관련 문제