Visualizza il riutilizzo in frammenti Android
-
12-11-2019 - |
Domanda
Sto cercando di salvare i miei stati di vista nel mio frammento, ma sono preoccupato di far perdere la mia attività. Ecco cosa sto facendo:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state){
if(mView != null){
View oldParent = mView.getParent();
if(oldParent != container){
((ViewGroup)oldParent).removeView(mView);
}
return mView;
}
else{
mView = inflater.inflate(R.id.fragview, null)
return mView;
}
}
Sono preoccupato perché so che tutte le opinioni si trattengono su un contesto e non so se si tratta del contesto di attività o dell'applicazione se gonfiato dal gonfiore. Forse sarebbe un'idea migliore creare pragmaticamente la vista e impostare i suoi attributi usando getActivity (). GetApplication () piuttosto che usare il gonfiore. Apprezzerei qualsiasi feedback su questo.
Grazie!
Modifica: perdita di attività confermata, sebbene questo codice funzioni alla grande non farlo:*(
Soluzione
Sto cercando di salvare i miei stati di vista nel mio frammento, ma sono preoccupato di far perdere la mia attività.
Uso onSaveInstanceState()
(nel frammento) e onRetainConfigurationInstance()
(nell'attività) per il mantenimento di "stati di visualizzazione" tra le modifiche alla configurazione. Non sono abbastanza sicuro a quali altri "stati di vista" a cui potresti fare riferimento.
Sono preoccupato perché so che tutte le opinioni si trattengono su un contesto e non so se si tratta del contesto di attività o dell'applicazione se gonfiato dal gonfiore.
Da quando ha usato il Application
Perché l'inflazione non sembra funzionare bene, dovresti gonfiare dal Activity
. E, quindi, le opinioni avranno un riferimento all'attività che li ha gonfiati.
Altri suggerimenti
@Schwiz é ha implementato qualcosa di simile.
Uso il setRetainInstance
nel frammento. Sul layout del frammento ho un segnaposto Framelayout in cui ho messo il mio webview all'interno.
Questo webview viene creato a livello di programmazione sull'oncreate del frammento utilizzando il contesto dell'applicazione e lo faccio a addView(webView)
sul layout gonfiato in onCreateView()
.
webView = new WebView(getActivity().getApplicationContext());
E su OnDestroyview rimuovo semplicemente il webview dal mio segnaposto Framelayout.
Funziona davvero bene, a meno che tu non provi a riprodurre un video a schermo intero. Non funziona perché si aspetta un contesto di attività
Sto cercando di salvare i miei stati di vista nel mio frammento
Per salvare e trattenere lo stato di vista puoi semplicemente utilizzare View.onSaveInstanceState ()
e View.onRestoreInstanceState (Parcelable state)
Ti aiuterà a gestire il risparmio e il ripristino dello stato di vista indipendentemente da nessuna delle due attività o frammenti. Vedi questa risposta per ulteriori informazioni a riguardo (Come evitare che le viste personalizzate perdino lo stato attraverso le modifiche all'orientamento dello schermo)