2011-11-23 15 views
7

Voglio toccare un controllo sullo schermo e avere lo scorrimento di ListView fino a quando una determinata riga si trova nella parte superiore dello schermo, una funzione che sembra essere molto semplice in iOS.smoothScrollToPositionFromTop per Froyo ListView?

Ho trovato un tale metodo nell'API: http://developer.android.com/reference/android/widget/AbsListView.html#smoothScrollToPositionFromTop(int, int) Tuttavia, questo è per API Livello 11, Honeycomb. Ciò significa che i telefoni non potranno usarlo fino a Ice Cream Sandwich e ci vorrà molto, molto tempo prima che sia pratico impostare Ice Cream Sandwich come requisito minimo per eseguire le app.

C'è un modo per ottenere questa stessa funzionalità in Froyo?

risposta

4

Usa

setSelection (int position) 
+0

Sai, avrei giurato ho provato e che non scorrere l'elenco. Ecco, fa saltare la lista con la riga corretta nella parte superiore dello schermo, che è grande! Sono preoccupato dei potenziali effetti collaterali indesiderati di tale approccio, poiché non era destinato a questo scopo, e sarebbe bello avere una scroll scorrevole invece del salto improvviso ... quindi accetto ancora le risposte se qualcuno ha una soluzione migliore. Grazie per la pronta risposta, gwa, ci ripenso su se necessario. :) –

+0

Nessun problema Ciad! Lo uso nella mia app e finora ha funzionato abbastanza bene. Fammi sapere se trovi qualcosa di meglio. Grazie! – gwa

12

Il seguente codice non è perfetto, ma lo fa il lavoro in molti casi:

if (android.os.Build.VERSION.SDK_INT >= 11) 
{ 
    listView.smoothScrollToPositionFromTop(p, 0); 
} 
else if (android.os.Build.VERSION.SDK_INT >= 8) 
{ 
    int firstVisible = listView.getFirstVisiblePosition(); 
    int lastVisible = listView.getLastVisiblePosition(); 
    if (p < firstVisible) 
     listView.smoothScrollToPosition(p); 
    else 
     listView.smoothScrollToPosition(p + lastVisible - firstVisible - 2); 
} 
else 
{ 
    listView.setSelectionFromTop(p, 0); 
} 

+0

Si noti che '' smoothScrollToPositionFromTop() '' ha un bug noto. Vedi http://stackoverflow.com/questions/14479078/smoothscrolltopositionfromtop-is-not-always-working-like-it-should/#20997828 per il problema e la soluzione. –

Problemi correlati