Autore Topic: Persistenza EditText in fragment  (Letto 362 volte)

Offline nanopeppe

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Sistema operativo:
    Windows XP/7/8
Persistenza EditText in fragment
« il: 16 Aprile 2014, 12:24:47 CEST »
0
Buongiorno a tutti e piacere a tutti. Questo è il mio primo post e spero di non commettere errori.
Sto sviluppando un software che utilizza solo ed esclusivamente Fragment dinamici, pertanto in nessun layout dichiaro il tag <fragment.../>. Questa app ha due fragment che chiamiamo FragA e FragB e un container main_container sia in portrait che in landscape. Le classi sono 3: "MainActivity", "FragA" e "FragB". Ora, la domanda è molto semplice, ma nonostante io abbia cercato ovunque su internet sui vari forum e tutorial, non sono riuscito a trovare la giusta soluzione e spero di trovare almeno qui qualcosa di illuminante. Se io scrivo all'interno di una EditText presente in FragA un testo mentre sono in portrait e poi passo in landscape, perdo il testo che avevo scritto, come posso evitarlo? In giro ho trovato molte soluzioni come l'utilizzo della onActivityCreate o la setRetainInstance, ma senza funzionare. A questo punto non so proprio cosa inventarmi. Addirittura avevo pensato di creare una classe per memorizzare di volta in volta i dati inseriti dall'utente in tempo reale così da memorizzarli e riprenderli gestendo i vari metodi che compongono il lifecycle.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Persistenza EditText in fragment
« Risposta #1 il: 16 Aprile 2014, 13:42:29 CEST »
0
Di default quando cambi orientazione del terminale, l'activity viene distrutta e ricreata da zero. E' lasciato a te intercettare l'evento di distruzione, salvarti da qualche parte i dati che ti servono, intercettare l'evento di creazione della nuova acitivity e ripristinare i dati prima salvati. Non ho sotto mano esempi, ma se cerchi onSaveInstanceState/onRestoreInstanceState dovresti trovare diversi spunti.

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Persistenza EditText in fragment
« Risposta #2 il: 16 Aprile 2014, 15:09:09 CEST »
0

Offline nanopeppe

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Sistema operativo:
    Windows XP/7/8
Re:Persistenza EditText in fragment
« Risposta #3 il: 16 Aprile 2014, 18:54:05 CEST »
0
Ho risolto facendo nella MainActivity da così:

Codice (Java): [Seleziona]
if(calcoliFragmentView != null){               
                calcoliFragment = new CalcoliFragment();
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(calcoliFragmentView.getId(), calcoliFragment, CalcoliFragment.class.getName());
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
}

A così:
Codice (Java): [Seleziona]
if(calcoliFragmentView != null){
               
                calcoliFragment = (CalcoliFragment) getSupportFragmentManager().findFragmentByTag(CalcoliFragment.class.getName());
               
                if(calcoliFragment == null){
                        calcoliFragment = new CalcoliFragment();
                }
               
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(calcoliFragmentView.getId(), calcoliFragment, CalcoliFragment.class.getName());
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
        }

Post unito: 16 Aprile 2014, 18:56:13 CEST
Qui trovi la risposta:
Handling Runtime Changes | Android Developers

Grazie, mi sono accorto solo ora che la soluzione proposta dal link è la stessa che ho adottato io. Grazie comunque, ci avevi preso in pieno!
« Ultima modifica: 16 Aprile 2014, 18:56:13 CEST da nanopeppe, Reason: Merged DoublePost »