2012-05-22 19 views
13

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

+1

si potrebbe mostrare quello che hai provato? – gideon

+0

ya ho aggiunto l'immagine qui come esempio ..controlla questo uno – Jai

+0

Che ne dici di picasso? Questo soddisfa le tue esigenze? http://square.github.io/picasso/ – phi

risposta

19

È 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.

+0

Grazie amico, fammi provare questo. – Jai

+1

Il collegamento è interrotto ora! :( –

0

// 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) 
    { 

    } 

} 
0

creare le liste scorrono più velocemente: -

  1. ridurre il numero di condizioni usato nello getView del tuo adattatore.
  2. ridurre il numero di avvisi di raccolta della spazzatura che si ottiene nel
  3. funzione Add scorrimento log (limitare il numero di righe da rinfrescare al di scorrimento)
1

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

Problemi correlati