2013-08-09 9 views
12

Nella mia applicazione, ho la funzionalità di tabbar. In una scheda sto visualizzando i dati del server in lisview e facendo clic su quella pagina di dettaglio per quell'elemento dell'elenco sarà aperto in un nuovo frammento.Come evitare di chiamare suCreateView quando il pulsante indietro viene premuto in un frammento in Android

Ma quando premo il pulsante indietro da quella pagina di dettaglio, ogni volta che viene visualizzata la vista della pagina precedente, così ogni volta che listview viene creata e viene recuperato un nuovo dato del server. Quindi, come impedire tale e basta visualizzare lo stato precedente quando si preme il tasto indietro?

risposta

5

Non credo che evitare di chiamare suCreateView sia una buona idea, oltre che se la funzione non viene chiamata, ci sarà un'eccezione, quindi NO, non si dovrebbe. Invece di farlo, ti suggerisco di spostare il tuo "listview creato e nuovo recupera nuovi dati del server" in un altro posto dove puoi chiamare esplicitamente (quando vuoi, dove vuoi, onCreate() è un buon posto), non metterlo in onCreateView(). Spero che questo ti aiuti.

-1

È necessario memorizzare nella cache gli oggetti dati oltre alle variabili di visualizzazione poiché i riferimenti devono essere aggiornati se si stanno recuperando dati dal server e non si desidera effettuare nuovamente una chiamata, quindi utilizzare la diramazione per ramificare tale codice.

Creare un metodo init() in cui si effettuano tutte le chiamate di inizializzazione e server e si dirama logicamente il metodo call to init() ogni volta che non si desidera chiamare init().

31

So che è stato troppo lungo per dare questa risposta, ma quello che sto cercando di indovinare è che stai sostituendo il tuo frammento con l'altro. Intendo dire è che si sta utilizzando

ft.replace(R.id.realTabContent, fragment); 

di trasferirsi in altro frammento che è in uso nella vostra così semplice soluzione è utilizzare onItemClick

ft.add(R.id.realTabContent, fragment); 

invece di sostituire il vostro frammento.

Comprendere la differenza tra sostituire e aggiungere. Questo risolverà il tuo problema.

Sostituire: sostituirà il frammento originale e ri-creare la vista quando torni
Add: sarà solo aggiungere un nuovo frammento di impilare.

Spero che questo vi aiuterà qualcuno che sta affrontando lo stesso problema ...

+1

se impostiamo 'add' poi nuovo frammento si sovrappongono il vecchio –

+0

Questo non è corretto: i documenti dicono che * aggiungere * volontà aggiungi questo frammento al contenitore, non aggiungilo allo stack posteriore. https://developer.android.com/reference/android/app/FragmentTransaction.html#add(int,%20android.app.Fragment,%20java.lang.String) – liucheia