Was ist der richtige Weg, um mit den veralteten Fragment-Ereignissen onAttach und onInflate umzugehen?

9

Ich habe ein paar Artikel und Antworten gelesen (einschließlich dies eins ) in Bezug auf veralteten Code, aber ich bin ein wenig verwirrt, wie man (speziell) den veralteten Fragment -Ereignishandler onInflate behandelt.

Ich habe meine Implementierung von

ersetzt %Vor%

mit

%Vor%

Wenn ich meine App auf einem & lt; API23-Maschine wird der Ersatzcode nicht aufgerufen.

Wenn ich den ursprünglichen veralteten Code wiederherstelle (so dass ich jetzt beide Methoden implementiert habe), wird der veraltete Code aufgerufen, die korrekte Funktionalität wird zurückgegeben, aber jetzt wird ein Aufruf an eine veraltete Methode (?) vorgenommen.

Und wenn ich die App auf einem API23-Rechner starte, scheint es, dass BEIDE Versionen des Handlers aufgerufen werden.

Die Frage ist also, was passiert hier? Wenn ich Code schreibe, der sowohl auf API23 als auch auf älteren Versionen laufen soll, muss ich sowohl die veralteten als auch die neuen Methoden implementieren?

Und wenn das der Fall ist, muss ich "veraltet" andere veraltete Methoden ausfindig machen und implementieren? (Und gibt es daher eine Liste dieser veralteten Methoden, für die "Back-Code" verwendet werden soll?)

UPDATE:

Ich habe jetzt von android.app.Fragment zu android.support.v4.app.Fragment geändert (dh von nativen Fragmenten zu Support-Fragmenten) und die App funktioniert nun wie erwartet, wobei der Ersetzungs-Handler-Code für alle Versionen läuft und durch den Android läuft Quelle wie erwartet.

Aber die Frage bleibt: WARUM ?

Warum ist die 'native' android.app.Fragment Implementierung? Rückblickend auf frühere Fragen wurde dieses Thema bereits im September 2015 diskutiert. Also Warum ist es immer noch ein Problem? Und warum sollte es einen Unterschied bei der Implementierung von Support und nativen Fragmenten nach API 11 geben?

    
SimonH 21.03.2016, 15:55
quelle

1 Antwort

2

Nein, Sie sollten

nicht implementieren %Vor%

Wenn eine Methode veraltet ist, können Sie stattdessen (normalerweise) die Ersatzfunktion verwenden. Überprüfen Sie Fragments Definitionen von onInfllate:

%Vor%

Wie Sie sehen können, ist onInflate(Context context...) eine Erweiterung von onInflate(Activity activity...) und abwärtskompatibel. Wenn Sie super.onInflate(context, attrs, savedInstanceState); in Ihrer überschriebenen Methode aufrufen, können Sie davon ausgehen, dass sie sowohl mit API23 als auch mit früheren Versionen funktioniert.

  

Wenn ich meine App auf einem & lt; API23-Maschine, der Ersetzungscode ist nicht   genannt.

Das scheint seltsam, ich kann es nicht reproduzieren, mein Log wird mit einem Code wie diesem in einem Nicht-V23-Rechner ausgeführt:

%Vor%

Stellen Sie sicher, dass:

  1. Sie importieren die Support-Version von Fragment, android.support.v4.app.Fragment anstelle von android.app.Fragment , und Sie verwenden getSupportFragmentManager() anstelle von getFragmentManager() .
  2. Sie haben die neuesten Bibliotheken von support-v4 und appcompat-v7 sowie compileSdkVersion 23 in Ihrem build.gradle
  

Und wenn ich die App auf einem API23-Rechner starte, erscheint BEIDE   Versionen des Handlers werden aufgerufen.

Dies kann durch den onInflate(Context context...) -Code erklärt werden, wobei, wenn es von einer Aktivität aufgerufen wird, onInflate(Activity activity...)

aufgerufen wird

BEARBEITEN

Zum Update:

Die native Implementierung von android.app.Fragment soll nicht abwärtskompatibel sein. Der Code von android.app.Fragment ist wegen dieser Tatsache im Allgemeinen viel einfacher als der von android.support.v4.app.Fragment .

Darüber hinaus gibt es einige Funktionen in der nativen Implementierung, die nicht in die Support-Bibliothek eingeführt werden können, weil sie entweder schwer zu entwerfen sind oder weil sie keine Priorität für die Entwickler haben. Z.B. In nativer Implementierung wird im onInFlate () - Quellcode Transition verwendet, um den Eingang oder Ausgang des neuen Fragments zu animieren. Das ist nirgendwo in der Support-Bibliothek zu finden.

    
Sevle 21.03.2016, 16:15
quelle

Tags und Links