6

Ho un ListView che visualizza in ogni riga un'immagine estratta da Internet e una stringa.Android - ListView - chiama il getView() su richiesta

In generale funziona correttamente. Tuttavia voglio prendere il controllo sulla strada quando le viste (righe) sono gonfiate. Per impostazione predefinita, quando la riga è visibile, viene chiamato il metodo getView() dell'adattatore.

Questo naturalmente non è uno dei migliori comportamenti, perché se ho un ListView con diverse centinaia di dischi, e ho bisogno di raggiungere quelli in basso, mentre scorrendo la ListView, il metodo getView() verrà richiamato per ogni fila fino a raggiungere il piè di pagina.

quindi voglio chiamare GetView solo dopo lo scorrimento e il ListView è in pausa di stato/di inattività, ma non hanno idea di come andare su questo:

Ecco come ho iniziato:

listView.setOnScrollListener(new OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     if(scrollState==SCROLL_STATE_IDLE){ 
      // Invoke get view only on visible items 
     } 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
      int visibleItemCount, int totalItemCount) { 

    } 
}); 

questa è la GetView del mio adattatore:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.row, parent, false); 

     holder = new ViewHolder(); 
     holder.title = (TextView) convertView.findViewById(R.id.textView); 
     holder.image = (ImageView) convertView.findViewById(R.id.imageView); 
     holder.position = position; 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 


    holder.title.setText(data.get(position).getTitle()); 
    holder.image.setImageResource(R.drawable.ic_launcher); 
    new LoadImageAsync(data.get(position).getUrl(), holder.image).execute(); 

    return convertView; 
} 

per favore, datemi qualche indicazioni su dove dovrei guardare al fine di raggiungere questo obiettivo: Call GetView() solo dopo lo scorrimento, e solo per visib le voci.

+1

check ApiDemos, sezione Efficient Adapter –

+0

@TomislavNovoselec, grazie per il suggerimento. Vale la pena di inversione. –

risposta

4

Recentemente ho letto un articolo su questo ... here. Non l'ho provato, ma sembra una teoria del suono.

Sostanzialmente, sostengono l'aggiunta di un valore booleano che si utilizza per tenere traccia se si sta scorrendo o meno e utilizzarlo come indicatore nell'adattatore. Se il valore booleano è vero (stai scorrendo), disegna solo le visuali testuali nel tuo layout. Se false (hai smesso di scorrere) disegni tutto.

Si dice all'adattatore di ridisegnare le viste visibili quando non si scorre usando notifyDataSetChanged().

+0

Grazie per il link. Quell'articolo in congiunzione con esempi di dimostrazioni API mi ha aiutato a raggiungere il mio obiettivo. Ora ho l'adattatore più intelligente di sempre. :) –

+0

Grazie, chiamare notifyDataSetChanged() dopo aver aggiunto elementi aggiuntivi in ​​una chiamata aysnchronous aiutato! (usando android-query) –

Problemi correlati