2012-08-31 19 views
5

Sto costruendo un'app che genera dinamicamente alcune etichette e viste. Ho definito come la mia "vista personalizzata" dovrebbe apparire in un layout xml e dal codice che ho gonfiato questo layout.Come memorizzare le viste in Android?

Perché il layout gonfiato sarà sempre lo stesso, voglio fare questo passaggio solo una volta. Dopo che ho il layout, voglio memorizzarlo nella cache e usarlo la prossima volta quando ne avrò bisogno.

Il problema è che se metto il mio layout gonfiato in cache (in un hashmap con l'esempio) e lo aggiungo a un layout genitore, la prossima volta quando provo ad aggiungerlo di nuovo (questa volta otterrò il layout dalla cache) il sistema dice che il mio layout ha già un genitore.

Conoscete qualche metodo per staccare una vista secondaria dal genitore senza rimuovere la vista secondaria?

Aggiunto po 'di codice:

private static HashMap<String, LinearLayout> mComponentsCache; 

// inflate and add the layout in cache 
layout = (LinearLayout)mLf.inflate(R.layout.form_textbox, mHolder, false); 
mComponentsCache.put(FormFieldType.TYPE_TEXT, layout); 
+0

In che modo esattamente si memorizza nella cache il layout e perché lo stai facendo in questo modo? – DroidBender

+2

Voglio farlo in questo modo perché non ha senso rigonfiare la stessa vista che era già gonfiata. Ad esempio, devo mostrare 5 caselle di testo che hanno lo stesso layout ma contenuti diversi. –

risposta

9

Non si può effettivamente fare questo. Sto citando il tuo commento

I want to do it in this way because is no point to re-inflate the same view which was already inflated. As an example I have to show 5 textboxes which have the same layout but different content.

Si dovrà gonfiare ogni tempo, perché avete bisogno di 5 differenti istanze di questo campo testo. Se desideri non gonfiare, dovresti trovare un modo per copiare il layout già creato che non aiuterà a migliorare perché la copia è anche "costosa".

In realtà, per chiarire, la visualizzazione non è soggetta a parsing XML (nel caso si pensi così), è un codice compilato e, quindi, il fatto che si impegna a implementare un modo per creare una copia della tua vista è inutile.

Linea inferiore: attaccare al gonfiaggio.

+0

Grazie. Attaccherò all'inflazione :) –

+0

"In effetti, per essere chiari, gonfiare la vista non subisce l'analisi XML (nel caso lo si pensi), è un codice compilato" .... risolto uno delle confische che avevo ... thnx :-) –

+0

Se questo è il caso, allora come funziona il caching delle righe listview? Sembra che siamo in grado di riutilizzare le visualizzazioni lì, come fa? – Justin

Problemi correlati