2009-10-10 3 views
2

나는 X 초마다 새로운 이벤트가 폴링되는 대화방 애플리케이션을 구축 중입니다. 발생 때마다,이 코드는 아래에 새로운 데이터 스크롤을 가진 RoomAdapter (ArrayAdapter와의 사용자 지정 하위 클래스)를 업데이트 :ListView (또는 ScrollView) 내의 스크롤 위치 감지

RoomAdapter adapter = (RoomAdapter) getListAdapter(); 
for (int i=0; i<newEvents.size(); i++) 
adapter.add(newEvents.get(i)); 
getListView().setSelection(events.size()-1); 

이 괜찮 것을 제외 사용자에 눈까지 스크롤되는 경우 방의 역사는 설문 조사가 일어 났을 때 그녀를 가장 아래쪽으로 뛰어 넘을 것입니다. 내가하고 싶은 것은 사용자가 이미 목록의 맨 아래에 있다면 새로운 이벤트에 대한 설문 조사 후에 그대로 머물러 있도록하는 것입니다. 사용자가 의도적으로 위쪽으로 스크롤하면 사용자가 방해받지 않기를 바랍니다.

이미 ListView의 맨 아래로 스크롤 한 것을 어떻게 감지합니까?

참고 : 터치 모드에서 setSelection을 호출하면 실제로 항목을 선택하지 않고 as the docs note을 호출하기 때문에 getListView(). getSelectedItemPosition()을 수행 할 수 없습니다.

답변

6

나는 이것을 시도하지 않았지만, 대략 getLastVisiblePosition()==getCount()-1은 어떻습니까? (방법에 대한 ListView)

+0

붐! 그거였다. 나는 그 방법을 놓쳤다. 고맙습니다! – Konklone

5

그러나 그것은 적절한 방법이 아닙니다. android:transcriptMode

사용
-리스트의 행동 내용이 변경
-
스크롤되지 않는다 "불가능"- 마지막 항목이 표시되는 경우, "정상"이 아래로 스크롤
- "alwaysScroll 역순으로
에서 스택 항목 - - "항상 android:stackFromBottom
• 하단
에 스크롤 채팅
에 유용 • 어댑터
에서 마지막 항목과 시작 - 식당을 노화, 토크, IRC 등

+0

그 당시, CommonsWare의 대답은 여전히 ​​적절한 방법이었고, 나는 transcriptMode가 아직 존재하지 않았다고 믿는다. 그래서 나는 그의 받아 들여진 대답을 없애지 않을 것입니다. 그러나 명확히하기를 당신을 감사하십시오! – Konklone