2012-08-23 16 views
8

La mia lista deve scorrere automaticamente fino alla fine, quando il nuovo messaggio viene ricevuto o inviato. Ma quando uso la tastiera Android per inviare messaggi da EditText sotto ListView, ListView ridimensionato e nuovo messaggio, che voglio inviare, appare fuori dallo schermo e devo scorrere verso il basso per vederlo, anche se la tastiera scompare e ListView ridimensiona di nuovo.ListView non scorre per terminare, quando la tastiera usa

Per scorrere ListView che uso:

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

ma non funziona correttamente nel mio caso.

Qualcuno sa perché potrebbe verificarsi? C'è un modo, che SEMPRE scorre ListView per terminare?

Grazie, il vostro aiuto è molto apprezzato!

+0

Come hai avuto l'evento di mostrare la tastiera quando vai su EditText? –

risposta

8

Si può provare ad aggiungere questa riga di codice dopo aver impostato la selezione al tuo elenco:

listView.smoothScrollToPosition(listView.getCount()); 

risultante codice dovrebbe essere simile a questo:

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

Funziona! Grazie! –

1

Imposta android: windowSoftInputMode in manifest per l'attività su adjustPan|adjustResize.

+2

Non funziona. Non voglio correggere l'attività, perché ho un altro elemento nella schermata, ad esempio il pannello di sinistra. Questo problema è solo per ListView. Voglio usare il metodo, che scorre sempre ListView per terminare. –

+0

I documenti specificano che ciò non è possibile: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#SOFT_INPUT_ADJUST_RESIZE – Eliezer

16

Prova questa insead del codice:

listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 

(o impostarlo dal layout XML).

Problemi correlati