2

Ich habe heute einige Stunden verloren, weil mein Funktionscode nicht mehr funktionierte. Der Code der Ansicht eines Fragments nachladen nicht funktionierte nicht mehr, nachdem auf die neue Version von Support Library 25.1.0 Aktualisierung:Refresh Fragment funktioniert nicht mehr

Dies ist mein Code:

FragmentManager manager = getActivity().getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = manager.beginTransaction(); 
fragmentTransaction.detach(fragment); 
fragmentTransaction.attach(fragment); 
fragmentTransaction.commit(); 

ich versucht habe, zu debuggen einige setzen Haltepunkte auf

public void onPause() 
public void onStop() 
public void onAttach(Context context) 
public void onDetach() 
public void onDestroyView() 
public void onDestroy() 

aber die Anwendung eintritt, wird nicht in eine dieser Funktion und nichts auf dem Bildschirm passiert.

Wenn ich allein loslassen, ohne anzuhängen, geben Sie die Anwendung in onPause und onStop und die Ansicht verlassen den Bildschirm.

+1

verwenden Sie sollten dies in eine Frage trennen und dann Ihre eigene Frage beantworten. Stellen Sie nicht die Frage und die Antwort zusammen, es ist verwirrend. –

+0

@RickS ok, es ist fertig;) –

+0

Danke! Nach einiger Zeit sollten Sie in der Lage sein, es als die akzeptierte Antwort zu markieren. –

Antwort

3

Ich habe mich mit dem gleichen Problem konfrontiert, und keine Antwort online gefunden. Schließlich habe ich herausgefunden, dass einige Optimierungen zu Fragmenttransaktionen in Revision 25.1.1 der Support-Bibliothek hinzugefügt wurden. (siehe https://developer.android.com/topic/libraries/support-library/revisions.html#25-1-1). die für Ihre Transaktion zu deaktivieren wird es wie erwartet:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.setAllowOptimization(false); 
transaction.detach(fragment).attach(fragment).commitAllowingStateLoss(); 

aktualisieren

setAllowOptimization veraltet. Verwenden Sie stattdessen setReorderingAllowed.

+0

Warum empfehlen Sie 'commitAllowingStateLoss' statt nur' commit'? – Aba

1

Vielen Dank dafür. Hier ist eine kleine Änderung, die ich getSupportFragmentManager

FragmentTransaction t = getActivity().getSupportFragmentManager().beginTransaction(); 
t.setAllowOptimization(false); 
t.detach(this).attach(this).commitAllowingStateLoss(); 
Verwandte Themen