2012-11-26 9 views
14

Ho una lista personalizzata e ci vogliono pochi minuti per presentarsi. Quando stavo cercando di verificare dove si trova il problema, ho visto che anche quando ho solo 1 elemento nell'elenco, il metodo getCount() viene chiamato 5 volte, getVIew() viene chiamato una volta, quindi getCount() essere chiamato a più tempo. Nel complesso getCount() viene chiamato 7 volte. Ha senso?Perché viene richiamato getCount in adapter così tante volte?

Grazie!

+0

Per favore fornire un esempio di codice! –

+0

Mostra il codice. E dubito piuttosto che getCount() faccia scorrere la lista –

+0

mentre stavi scorrendo? fornire più dati – GamDroid

risposta

9

È possibile vedere here le diverse chiamate interne al metodo Adapter.getCount().

Ma è necessario tenere presente che non si ha il controllo su come verrà chiamato questo metodo.

Può essere chiamato più volte ed è per questo che è necessario mantenerlo il più velocemente possibile.

+0

Ci dispiace, ma non ho capito la parte "mantieni il più veloce possibile" - questo metodo restituisce solo la dimensione dell'array giusto? – user1787773

+1

Sicuro. Ma puoi scavalcarlo come preferisci. L'idea è di assicurarti di non eseguire calcoli costosi, poiché è probabile che venga chiamata più volte e nel thread dell'interfaccia utente. – fiddler

+0

Non l'ho ignorato. tutto ciò che faccio è restituire la dimensione dell'array. Quindi suppongo che ciò significhi che il tempo che richiede il listView per apparire non ha nulla a che fare con il getCount() che viene chiamato più volte? – user1787773

2

getCount() è chiamato troppe volte perché App-USER può update its list (possibile aggiungere dati nel suo stoccaggio) in qualsiasi momento ed è per questo torniamo, (storage).size() (numero totale di elementi).

1

Il metodo adattatore getCount() verrà chiamato nei seguenti casi.

1) quando si imposta l'adattatore su Vista elenco/Vista griglia.

2) quando si chiama notifyDataSetChanged sull'adattatore.

Così, il check-in codice, si potrebbe fare i casi di cui sopra più tempo o in modo ricorsivo ..

0

Si dovrebbe avere un pulsante di ricerca che aggiorna l'adattatore durante la ricerca. Questo metodo viene chiamato a disegnare più volte la vista, se all'interno di quel metodo si dispone di un setAdapter, quindi, getCount verrà chiamato più volte e finirà per restituire 0 e la vista non verrà riempita.