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:*(

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top