listAdapter를 사용하여 목록보기를 업데이트 한 후 목록이 맨 아래로 스크롤되도록하여 목록에 입력 된 마지막 요소를 표시하고 싶습니다. 어떻게해야합니까?
나는 이것을 시도했지만 운이 없다 :
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
감사합니다
listAdapter를 사용하여 목록보기를 업데이트 한 후 목록이 맨 아래로 스크롤되도록하여 목록에 입력 된 마지막 요소를 표시하고 싶습니다. 어떻게해야합니까?
나는 이것을 시도했지만 운이 없다 :
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
감사합니다
답변:
목록 데이터가 변경된시기를 알고 있다고 가정하면 목록 선택을 마지막 행으로 설정하여 목록을 맨 아래로 스크롤하도록 수동으로 지시 할 수 있습니다. 다음과 같은 것 :
private void scrollMyListViewToBottom() {
myListView.post(new Runnable() {
@Override
public void run() {
// Select the last row so it will scroll into view...
myListView.setSelection(myListAdapter.getCount() - 1);
}
});
}
목록보기에서 다음 매개 변수를 사용해야합니다.
스크롤
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
리스트의 머리를 아래로 설정
lv.setStackFromBottom(true);
이러한 매개 변수를 XML로 설정할 수도 있습니다 (예 : 이처럼 :
<ListView
...
android:transcriptMode="alwaysScroll"
android:stackFromBottom="true" />
TRANSCRIPT_MODE_ALWAYS_SCROLL과 setSelection의 조합으로 저에게 효과적이었습니다.
ChatAdapter adapter = new ChatAdapter(this);
ListView lv = (ListView) findViewById(R.id.chatList);
lv.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
lv.setAdapter(adapter);
adapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
lv.setSelection(adapter.getCount() - 1);
}
});
버튼 클릭에 대한 응답으로 이것을 사용하여 성공 했으므로 내용을 업데이트 한 후에도 사용할 수 있다고 생각합니다.
myListView.smoothScrollToPosition(theListAdapter.getCount() -1);