2012-08-23 17 views
8

My ListView powinna automatycznie przewijać do końca, gdy nowa wiadomość zostanie odebrana lub wysłana. Ale kiedy używam klawiatury Android, aby wysłać wiadomość z EditText poniżej ListView, zmiana rozmiaru ListView i nowa wiadomość, którą chcę wysłać, pojawia się poza ekranem i muszę przewinąć w dół, aby ją zobaczyć, nawet jeśli klawiatura zniknie, a ListView zmieni się ponownie.ListView nie jest przewijany do końca, gdy klawiatura używająca

Aby przewijać ListView używam:

listView.postDelayed(new Runnable() {
@Override public void run() { listView.setSelection(listView.getCount()); } }, 100);

ale nie działa prawidłowo w moim przypadku.

Czy ktoś wie, dlaczego może wystąpić? Czy istnieje sposób, który ZAWSZE przewija ListView do końca?

Dzięki, Twoja pomoc jest bardzo cenna!

+0

Skąd się wzięło wydarzenie pokazania klawiatury po przejściu do EditText? –

Odpowiedz

8

Można spróbować dodać poniższy wiersz kodu po ustawieniu wybór do swojej listy:

listView.smoothScrollToPosition(listView.getCount()); 

wynikowy kod powinien wyglądać następująco:

listView.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      listView.setSelection(listView.getCount()); 
      listView.smoothScrollToPosition(listView.getCount()); 
     } 
    }, 100); 
+1

To działa! Dziękuję Ci! –

1

Ustaw android: windowSoftInputMode w manifeście dla działania na adjustPan|adjustResize.

+2

To nie działa. Nie chcę naprawiać aktywności, ponieważ mam inne elementy na ekranie, na przykład lewy panel. Ten problem dotyczy tylko ListView. Chcę użyć metody, która zawsze przewija ListView do końca. –

+0

Dokumenty wyraźnie mówią, że nie jest to możliwe - http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#SOFT_INPUT_ADJUST_RESIZE – Eliezer

16

Spróbuj INSEAD o kodzie:

listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 

(lub ustawić według układu XML).

Powiązane problemy