Ich versuche meine View-Zustände in meinem Fragment zu speichern, aber ich mache mir Sorgen, dass ich meine Aktivität lecke. Hier ist was ich mache:
%Vor%Ich mache mir Sorgen, weil ich weiß, dass sich alle Ansichten auf einen Kontext beziehen und ich nicht weiß, ob es der Aktivitätskontext oder der Anwendungskontext ist, wenn er vom Inflator aufgeblasen wird. Vielleicht wäre es eine bessere Idee, die Ansicht pragmatisch zu erstellen und ihre Attribute mit getActivity (). GetApplication () zu setzen, anstatt den Inflater zu verwenden. Ich würde mich über jede Rückmeldung freuen.
Danke!
BEARBEITEN: Aktivitätsleck bestätigt, obwohl dieser Code gut funktioniert, mach es nicht: * (
Ich versuche meine View-Zustände in meinem Fragment zu speichern, aber ich mache mir Sorgen, dass ich meine Aktivität lecke.
Verwenden Sie onSaveInstanceState()
(im Fragment) und onRetainConfigurationInstance()
(in der Aktivität), um "View states" über Konfigurationsänderungen hinweg zu verwalten. Ich bin mir nicht ganz sicher, auf welche anderen "View States" du dich beziehst.
Ich mache mir Sorgen, weil ich weiß, dass sich alle Ansichten auf einen Kontext beziehen, und ich weiß nicht, ob es der Aktivitätskontext oder der Anwendungskontext ist, wenn er vom Inflator aufgeblasen wird.
Da die Verwendung von Application
für die View-Inflation nicht gut zu funktionieren scheint, sollten Sie von Activity
aus aufblasen. Und deshalb werden die Ansichten einen Verweis auf die Aktivität enthalten, die sie aufgebläht hat.
@schwiz é haben etwas ähnliches umgesetzt.
Ich verwende setRetainInstance
im Fragment. Auf dem Fragment-Layout habe ich einen FrameLayout-Platzhalter, in den ich mein WebView hineinlege.
Dieses webView wird programmatisch auf dem onCreate des Fragments mit dem Anwendungskontext erstellt, und ich mache ein addView(webView)
auf dem überhöhten Layout in onCreateView()
.
Und bei onDestroyView entferne ich einfach die webView von meinem framelayout Platzhalter.
Es funktioniert wirklich gut, es sei denn, Sie versuchen, ein Video im Vollbildmodus zu spielen. Das funktioniert nicht, weil es einen Aktivitätskontext erwartet
Ich versuche, meine Ansichtszustände in meinem Fragment zu speichern
Um den Zustand der Ansicht zu speichern und beizubehalten, können Sie einfach View.onSaveInstanceState ()
und View.onRestoreInstanceState (Parcelable state)
Es wird Ihnen helfen, den Ansichtszustand unabhängig von Aktivitäten oder Fragmenten zu speichern und wiederherzustellen. Weitere Informationen finden Sie in dieser Antwort ( wie verhindert wird, dass benutzerdefinierte Ansichten bei Änderungen der Bildschirmausrichtung den Status verlieren )
Tags und Links memory-leaks android android-fragments android-support-library