Wiederverwendung in Fragmenten Android anzeigen

8

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

    
schwiz 27.03.2011, 19:08
quelle

3 Antworten

2
  

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.

    
CommonsWare 27.03.2011, 19:21
quelle
1

@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() .

%Vor%

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

    
luciofm 09.11.2011 18:16
quelle
0
  

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)

verwenden

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 )

    
rus1f1kat0R 15.08.2012 06:55
quelle