Chciałbym się upewnić, że lista jest przewijana do samego końca, po zaktualizowaniu widoku listy za pomocą listAdapter, tak aby wyświetlał ostatni element wpisany na listę. W jaki sposób mogę to zrobić ?
Próbowałem tego, ale bez powodzenia:
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
Dziękuję Ci
Odpowiedzi:
Zakładając, że wiesz, kiedy dane listy uległy zmianie, możesz ręcznie nakazać przewijanie listy w dół, ustawiając wybór listy na ostatni wiersz. Coś jak:
źródło
Musisz użyć tych parametrów w widoku listy:
Zwój
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
Ustaw nagłówek listy na dole
lv.setStackFromBottom(true);
Możesz również ustawić te parametry w XML, np. lubię to:
źródło
Połączenie TRANSCRIPT_MODE_ALWAYS_SCROLL i setSelection sprawiło, że zadziałało dla mnie
źródło
Udało mi się to wykorzystać w odpowiedzi na kliknięcie przycisku, więc sądzę, że możesz użyć go również po zaktualizowaniu zawartości:
źródło
Aby uzyskać to w ListFragment:
Dodano tę odpowiedź, ponieważ jeśli ktoś wyszukuje w Google ten sam problem z ListFragment, po prostu go znajduje.
pozdrowienia
źródło
Za pomocą: Ustaw nagłówek listy na dole
lv.setStackFromBottom(true);
Pracowało dla mnie, a lista jest automatycznie przewijana w dół, gdy jest po raz pierwszy widoczna. Następnie lista przewija się tak, jak powinna
TRANSCRIPT_MODE_ALWAYS_SCROLL
.źródło
używam
aby dodać wpisy na dole, a starsze wpisy przewiń od góry, jak zapis rozmowy na czacie
źródło
getListView().smoothScrollToPosition(getListAdapter.getCount() - 1);
onstart, aby przewinąć na dół na początku działania.Najprostszym rozwiązaniem jest:
źródło
Tryb transkrypcji jest tym, czego chcesz i jest używany przez Google Talk i aplikację SMS / MMS. Czy podczas dodawania elementów poprawnie wywołujesz funkcję noticeDatasetChanged () na adapterze?
źródło