2012-09-11 9 views
13

È cruciale per le prestazioni avere ViewHolder come statico in un ViewHolder pattern?È cruciale per le prestazioni avere ViewHolder come statico in un pattern ViewHolder?

negozi oggetto A ViewHolder ciascuno dei punti di vista dei componenti all'interno del campo tag del layout, in modo da potervi accedere immediatamente senza la necessità di guardare in su ripetutamente. Innanzitutto, è necessario creare una classe per contenere il set esatto di visualizzazioni. Per esempio:

static class ViewHolder { 
    TextView text; 
    TextView timestamp; 
    ImageView icon; 
    ProgressBar progress; 
    int position; 
} 

risposta

8

Non è fondamentale per le prestazioni, è di usare. Se ViewHolder classe non sarà statica - è necessario fornire un'istanza della classe genitore:

No enclosing instance of type Type is accessible. 
Must qualify the allocation with an enclosing instance of type Type 
(e.g. x.new A() where x is an instance of Type). 
+10

Cosa succede se la classe ViewHolder viene utilizzata all'interno della stessa classe dell'adattatore? Quindi non devi fornire un'istanza della classe genitore ... –

+4

Sì, non è così. – Jin35

+0

Ma questo potrebbe far trapelare l'adattatore come indicato in http://stackoverflow.com/questions/10864853/quando-esattamente-is-tutto-di-uso-di-uso-anonodelle-in-classi – divyenduz

1

Edit: frainteso la questione - a quanto pare si sta chiedendo specificamente rendendolo static. Questo non dovrebbe essere cruciale per le prestazioni, ma l'idea è di grande aiuto.

montaggio finale qui: Static nested class in Java, why?

====

Orig risposta qui sotto:

E 'molto bello per spremere prestazioni da un ListView pesante (o qualche altro tipo di riciclato AdapterView). Tuttavia il modo migliore per dire sarebbe quello di profilare la performance in qualche modo.

Anche a Google IO 2010 raccomandano questo metodo:

http://www.youtube.com/watch?v=wDBM6wVEO70

Edit:

qui è anche un link ad traceview al profilo delle prestazioni, anche se io sono sicuro quanto bene lavori.

http://developer.android.com/tools/debugging/debugging-tracing.html

-2

Non è obbligatorio farlo. Ma quando lo fai in questo modo, stai usando di nuovo le visualizzazioni quando la vista dell'adattatore è nullo. Stai creando una vista e assegnando valori alla parte vista e tagghi l'intera vista usando la classe statica ViewHolder. Quindi quando ritorni e la vista non è nullo, verrà la parte visibile per ottenere il tag. In questo modo creerai meno oggetti e meno carichi di lavoro sull'adattatore.

Problemi correlati