2013-03-20 15 views
18

Sto utilizzando setContentView(R.layout.main) per passare le visualizzazioni nella stessa attività. Sto chiamando alcune attività asincrone e popolando i dati sul file di layout principale dopo che sto cambiando la vista chiamando il metodo setContentView(R.layout.main).Modificare i file di layout nella stessa attività

Sono venuto a sapere che non dovremmo usare il metodo setContentView più volte per la stessa attività. Anche se sta funzionando bene per me.

Qualcuno può spiegare perché non dovremmo utilizzare il metodo setContentView più volte per la stessa attività per modificare le visualizzazioni?

Creerà eventuali eccezioni relative alla memoria? Qualcuno potrebbe chiarire?

+0

Non so che potrebbe causare eccezioni. (Tranne OutOfMemory Exception probabilmente se lo fai quando la memoria Sys è bassa.) Sentiamo cosa dice l'altro. – Calvin

+0

Correlato: http://stackoverflow.com/q/6811989/783284 – Cody

risposta

2

Penso che il passaggio a Viste non sia una buona idea, perché la piattaforma Android ha già un solido framework per gestire la transizione tra le visualizzazioni e mantenere lo stato di ogni vista associata all'Attività è sempre meglio attenersi al framework esistente di pensare a qualche implementazione complessa che devi affrontare per fare tutte queste cose. Se non hai bisogno di queste cose per fare attenzione nella tua applicazione e se solo hai solo due o tre schermi nell'intera applicazione puoi provare a cambiare le visualizzazioni. Che anche in base a come sono strutturati i tuoi punti di vista se hai una logica complessa e molti dati necessari per creare queste viste, questo non sarà un buon modo per farlo. Un'altra cosa se aggiungi più viste dici che la funzionalità per l'applicazione è il carico che deve essere gestito dall'attività andrà alto. In questo caso dichiarerai e inizializzerai tutte le visualizzazioni all'interno di quella particolare attività, quindi mantenere tutte queste istanze di visualizzazione è pesante. Se vuoi saperne di più su Activty and Task gentilmente refer this link

+3

In altre parole, cambiare la vista probabilmente significa anche modificare una certa logica e, quindi, una nuova attività è più adatta. – adrianp

+0

voglio sapere dopo aver cambiato la vista la memoria allocata per la vista precedente sarà deallocata o meno.e ancora una cosa questo processo causerà qualsiasi eccezione di memoria.puoi chiarire su questi due problemi.perché sto usando il metodo setContentView per cambiare il visualizzazioni. –

+0

ricevi eccezioni di memoria? – Neil

0

Bene ogni volta che chiami setContentView() dovrai trovare di nuovo tutti i layout oltre a quello che penso che tu possa "farlo". Ma come discusso here questo è ill segnalato come chiaramente va contro le linee guida di Android. Anche Commonsware ha alcuni punti molto importanti: here, uno dei più importanti è che sarai incline a perdere memoria, dimenticandoti di ripulire le cose dalle tue visualizzazioni ecc. Che normalmente Android gestirà per te.

In breve, è necessario seguire le linee guida Android e utilizzare Fragments o avviare un nuovo Activity.

0

Secondo il developer docs setContentView (int layoutResID) viene utilizzato per

Impostare il contenuto di attività da una risorsa di layout. La risorsa verrà gonfiata aggiungendo tutte le visualizzazioni di livello superiore all'attività.

Nella migliore pratica questo metodo viene utilizzato per gonfiare il layout Activity all'avvio. Ciò non significa che causerà problemi in futuro se continui a utilizzare questo metodo. Per citare una risposta in this domanda

La setContentView sulla vostra attività in realtà chiama il setContentView sulla finestra utilizzata per l'attività, che si fa molto di più di una semplice gonfiare il layout.

vi suggerisco di trovare un modo alternativo per passare da un layout come usare un ViewPager con Fragments o qualche altro approccio Tabbing, ma alla fine tutto si riduce a ciò che si vuole fare.

This domanda potrebbe anche darvi quello che stai cercando.

Problemi correlati