2012-06-25 2 views
7

Sto aggiungendo EditTexts creati dinamicamente a un layout (metodo pulsante onClick). Quando ruoto lo schermo scompaiono gli editor modificati. Come posso aggiungerli a un pacchetto per inserirli nel metodo onSavedInstanceState? O c'è un altro modo per farlo? So che posso salvare il testo, ma c'è un modo per mantenere il layout dello schermo quando lo ruoto? Se l'utente preme il pulsante e aggiunge cinque EditTexts (con o senza digitare nulla), ho bisogno di salvare questo layout quando lo schermo viene ruotato (in pratica ho bisogno di eseguire il dummy proof della mia app :)).Come inserire una vista nel pacchetto

Grazie in anticipo!

+1

Penso di averlo capito! Salverò le stringhe da edittexts al pacchetto e quindi popolerò i nuovi edittexts quando lo schermo ruota. Voi ragazzi avete gettato la mia memoria. – TheCommander

risposta

9

Non è possibile aggiungere una vista a un fascio, perché non sono Parcelable/serializzabile. L'unica cosa che puoi e devi salvare nel pacchetto è lo stato attuale dell'attività.

È possibile mantenere una struttura di dati elenco o una variabile contatore che tiene traccia delle viste create dinamicamente. Salva anche i valori stringa di EditTexts. In onCreate devi interpretare tali informazioni per ricreare le viste e i loro stati.

+0

Come creo la variabile contatore? Non ho un ascoltatore onClick; Ho un metodo onClick nel mio file xml. Posso salvare le stringhe su un array, quindi utilizzare un ciclo for per creare gli editor e aggiungere le stringhe indicizzando gli elementi dell'array? – TheCommander

+0

Poiché Google consiglia l'uso della compressione e dell'offuscamento del codice tramite ProGuard, non è necessario definire i gestori di eventi in XML (a meno che non si proteggano i nomi dei metodi nel file di configurazione di ProGuard). Imposta/crea i gestori di eventi onClick nel codice. Non so esattamente come stai creando questi EditTexts. Se non viene applicato alcun posizionamento di fantasia, è sufficiente salvare i valori di testo e scorrere l'elenco di array di stringhe dal pacchetto savedInstanceState in onCreate per ricreare questi EditTexts. – tiguchi

0

Le visualizzazioni stesse non rappresentano le informazioni che è necessario salvare. Invece dovresti salvare le loro coordinate, larghezza, altezza, valore, ecc.

1

non puoi salvare una vista. bundle è solo un valore nome coppia. ovviamente puoi salvare il testo e poi renderlo di nuovo. il modo è solo tu hai detto.

onsaveInsatnceState (bundle save) salva il testo come save.putString ('text1', 'bla bla') ovviamente è necessario un ciclo per salvare tutto l'edittext.

poi nel oncreated (bundle SAVE)

si può ottenere quello che hai inserito da save.getString ('text1')

+0

So che posso salvare il testo, ma c'è un modo per mantenere il layout dello schermo quando lo ruoto? Se l'utente preme il pulsante e aggiunge cinque EditTexts (con o senza digitare nulla), ho bisogno di salvare questo layout quando lo schermo viene ruotato (in pratica ho bisogno di eseguire il dummy proof della mia app :)). Scusa se quello che volevo non era chiaro. Grazie! – TheCommander

+1

non preoccuparti. ma sfortunatamente non puoi salvare le viste, puoi salvare il numero di editText e il testo e mescolare nuovamente il layout usando queste informazioni. Penso che sia l'unica soluzione. – Xenione

0

Il tuo può salvare i dati della vista in una classe o in un arraylist. quando l'attività dei frammenti verrà riavviata rispetto a quando si recuperano i dati dallo stato di salvataggio nella funzione oncreate.

Utilizzare questa funzione setRetainInstance (true). dopo aver usato la funzione cosa la tua attività frammento non distruggerà.