Voglio fare qualcosa. Voglio fare il pigro caricamento in ListView
. Il mio ListView
contiene più di 10.000 dati & solo in TextView
. quindi non posso caricare tutti quei dati in prima volta quando lancio l'attività di lista. non è efficiente, quindi posso caricare i primi 20 o 30 elementi nell'elenco. inoltre le righe di ListView
vengono caricate quando le scorre sopra. quindi quando raggiungo l'ultimo indice di ListView
sull'ultimo indice, inserirò la barra di avanzamento e noteremo che i nuovi dati vengono caricati, quindi in quel momento i nuovi dati verranno caricati con l'ultimo + 1 indice. Come posso fare questo?Lista lista Android lazy loading
risposta
È possibile realizzare questo utilizzando l'implementazione di scheda infinita. Questo fa esattamente quello che vuoi. È anche possibile limitare il numero di righe da aggiornare per scroll. Ecco un link ad esso.,
Android: Implementing progressbar and "loading..." for Endless List like Android Market
https://github.com/commonsguy/cwac-endless
Per usarlo, si estende EndlessAdapter di fornire dettagli su come gestire l'infinito. In particolare, è necessario essere in grado di fornire una vista di riga, indipendente da una qualsiasi delle righe nell'adattatore effettivo, che fungerà da segnaposto mentre, in un altro metodo, si caricano i dati effettivi sull'adattatore principale. Quindi, con un piccolo aiuto da parte tua, transizioni senza interruzioni nei nuovi dati.
Grazie amico, fammi provare questo. – Jai
Il collegamento è interrotto ora! :( –
// messo in funzione di chiamata:
@Override
public View onCreateView(android.view.LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
ScrollListener scrollListener = new ScrollListener();
listView.setOnScrollListener(scrollListener);
}
e classe interna:
class ScrollListener implements OnScrollListener
{
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
int size = searchedPeople.size();
if(isScrolled && totalItemCount != 0 && size < totalPeoples)
{
if(firstVisibleItem + visibleItemCount >= totalItemCount)
{
yourfunction(size, size + limit); // call service in your functioin
isScrolled = false;
}
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
}
}
creare le liste scorrono più velocemente: -
- ridurre il numero di condizioni usato nello
getView
del tuo adattatore. - ridurre il numero di avvisi di raccolta della spazzatura che si ottiene nel
- funzione Add scorrimento log (limitare il numero di righe da rinfrescare al di scorrimento)
Aggiungi un onScrollListener alla ListView. Quando l'utente scorre, controlla se il ListView è quasi alla fine. Se sì, quindi recuperare più dati. Per fare un esempio:
public abstract class LazyLoader implements AbsListView.OnScrollListener {
private static final int DEFAULT_THRESHOLD = 10 ;
private boolean loading = true ;
private int previousTotal = 0 ;
private int threshold = DEFAULT_THRESHOLD ;
public LazyLoader() {}
public LazyLoader(int threshold) {
this.threshold = threshold;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(loading) {
if(totalItemCount > previousTotal) {
// the loading has finished
loading = false ;
previousTotal = totalItemCount ;
}
}
// check if the List needs more data
if(!loading && ((firstVisibleItem + visibleItemCount) >= (totalItemCount - threshold))) {
loading = true ;
// List needs more data. Go fetch !!
loadMore(view, firstVisibleItem,
visibleItemCount, totalItemCount);
}
}
// Called when the user is nearing the end of the ListView
// and the ListView is ready to add more items.
public abstract void loadMore(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount);
}
attività:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnScrollListener(new LazyLoader() {
@Override
public void loadMore(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// Fetch your data here !!!
}
});
}
}
È possibile trovare l'implementazione completa at this link
si potrebbe mostrare quello che hai provato? – gideon
ya ho aggiunto l'immagine qui come esempio ..controlla questo uno – Jai
Che ne dici di picasso? Questo soddisfa le tue esigenze? http://square.github.io/picasso/ – phi