Programing

Listview 목록을 업데이트 한 후 목록 끝으로 스크롤

lottogame 2020. 3. 21. 10:08
반응형

Listview 목록을 업데이트 한 후 목록 끝으로 스크롤


listAdapter를 사용하여 listview를 업데이트 한 후 목록이 맨 아래로 스크롤되도록하여 목록에 입력 된 마지막 요소를 표시하고 싶습니다. 어떻게해야합니까?

나는 이것을 시도했지만 운이 없다 :

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);

이것을 ListFragment에서 얻으려면 :

getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
getListView().setStackFromBottom(true);`

누군가가 ListFragment와 동일한 문제에 대해 Google 검색을하면이 것을 발견하기 때문에이 답변을 추가했습니다.

문안 인사


사용 : 목록의 머리를 아래로 설정 lv.setStackFromBottom(true);

나를 위해 일했고 목록이 처음 표시되면 자동으로 맨 아래로 스크롤됩니다. 그런 다음 목록이와 같이 스크롤됩니다 TRANSCRIPT_MODE_ALWAYS_SCROLL.


나는 사용한다

setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);

하단에 항목을 추가하고 오래된 항목은 대화 내용과 같이 상단에서 스크롤합니다.


대화 모드는 원하는 것이며 Google 토크 및 SMS / MMS 애플리케이션에서 사용됩니다. 항목을 추가 할 때 어댑터에서 notifyDatasetChanged ()를 올바르게 호출하고 있습니까?


가장 간단한 해결책은 다음과 같습니다.

    listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
    listView.setStackFromBottom(true);

참고 URL : https://stackoverflow.com/questions/3606530/listview-scroll-to-the-end-of-the-list-after-updating-the-list

반응형