Unterstützt die v4-Bibliothek neue Klassen, wenn sie verfügbar sind?

8

Ich weiß, dass die v4-Unterstützungsbibliothek verwendet werden kann, um in alten androiden Versionen Dinge zu implementieren, die in neueren Versionen eingeführt wurden, z. B. Fragmente. Wenn wir eine App implementieren, die < em> v4 support library zum Anzeigen von Dialogfragmenten verwendet es beispielsweise den neuesten Code (dh das ursprüngliche und neuere Fragment), wenn es auf ICS ausgeführt wird, oder verwendet es weiterhin die Unterstützung Code für jede Android-Version?

Gibt es eine Möglichkeit, in der gleichen App sowohl die android.app.Fragment -Klasse als auch die android.support.v4.app.Fragment -Klasse zu verwenden, wobei wir zur Laufzeit unterscheiden, ob wir auf einer Fragment-aktivierten Version von Android / do laufen müssen wir nur die Support-Klassen verwenden, wenn wir die v4-Support-Bibliothek importieren?

Vielleicht irre ich mich, aber es scheint mir keine gute Idee zu sein, den neuesten Code nicht zu verwenden, wenn ich auf neueren Plattformen laufe.

Halten Sie sich an den Fall Dialog Fragment , was ist Ihrer Meinung nach besser?

1) Verwenden Sie die v4-Unterstützungsbibliothek , d. h. verwenden Sie den Kompatibilitätscode für alle Android-Versionen

2) Verwenden Sie die neue android.app.DialogFragment , wenn Sie auf API-Ebene 11 oder höher ausgeführt wird, und verwenden Sie die veralteten Methoden showDialog und onCreateDialog der Klasse Activity , wenn sie auf API-Ebene & lt ausgeführt werden ; 11

Wie ich bereits gesagt habe, wäre der beste IMHO folgender, aber (korrigiere mich, wenn ich falsch liege), es ist keine mögliche Lösung:

3) Verwenden Sie die neue Klasse android.app.DialogFragment , wenn Sie auf API-Ebene 11 oder höher ausgeführt wird, und verwenden Sie die Klasse android.support.v4.app.DialogFragment beim Ausführen auf API-Ebene & lt; 11

Es tut mir leid, wenn ich ein wenig Verwirrung gemacht habe, ich hoffe, die Frage ist ziemlich klar ..

    
Gianni Costanzi 29.06.2012, 14:21
quelle

3 Antworten

11

Wenn Sie die Android-Support-Bibliothek in Ihrem Projekt verwenden, auch wenn das Gerät über eine kompatible API-Version von Android verfügt, sodass die Kompatibilitätsbibliothek nicht verwendet werden muss, werden weiterhin die Methoden aus der Kompatibilitätsbibliothek verwendet.

BEARBEITEN

Sie können den Code der Android-Support-Bibliothek v4 durchsuchen (in Kommentaren in android.support.v4.app.Fragment class):

  

Statische Bibliothek unterstützt die Version des Framework   android.app.Fragment. Wird zum Schreiben von Apps verwendet, die zuvor auf Plattformen ausgeführt wurden   zu Android 3.0. Wenn Sie mit Android 3.0 oder höher arbeiten,   Implementierung wird noch verwendet; es wird nicht versucht, auf die   Framework-Implementierung. Weitere Informationen finden Sie in der SDK-Dokumentation für Framework   Klassenübersicht.

Link hier .

    
Angelo 29.06.2012 14:28
quelle
6
  

Wenn wir zum Beispiel eine App implementieren, die die v4-Unterstützungsbibliothek zum Anzeigen von Dialogfragmenten verwendet, verwendet sie den neuesten Code (dh das ursprüngliche und neuere Fragment), wenn sie auf ICS ausgeführt wird, oder verwendet sie weiterhin den Supportcode für jede Android-Version?

Insbesondere für Fragmente wird immer ein eigener Backport verwendet. In anderen Fällen kann es zu einer nativen Implementierung weitergeleitet werden, sofern verfügbar.

  

Gibt es eine Möglichkeit, in der gleichen App sowohl die android.app.Fragment-Klasse als auch die android.support.v4.app.Fragment-Klasse zu verwenden, die zur Laufzeit unterscheidet, wenn wir auf einer Fragment-fähigen Version von android oder Müssen wir nur die Support-Klassen verwenden, wenn wir die v4-Support-Bibliothek importieren?

Ich würde bei den Support-Klassen bleiben. Sie würden eine Tonne zusätzlicher Arbeit für keinen wirklichen Nutzen hinzufügen, indem Sie Ihren alternativen Ansatz gehen.

  

Vielleicht irre ich mich, aber es scheint mir keine gute Idee zu sein, den neuesten Code nicht zu verwenden, wenn Sie auf neueren Plattformen laufen.

Sie sind willkommen zu Ihrer Meinung. Bei größeren Subsystemen wie Fragmenten würde der Nutzen durch die Kosten IMHO aufgewogen werden.

  

Wenn Sie an den Dialogfragmentfall denken, was ist Ihrer Meinung nach besser?

Die beste Option ist, DialogFragment überhaupt nicht zu verwenden, sondern stattdessen einen Weg zu finden, um das zu erreichen, was Sie wollen, ohne Dialoge zu benutzen.

Verwenden Sie von den drei Optionen, die Sie vorgestellt haben, zunächst die Option # 1. Sobald Sie der Meinung sind, dass Sie Support für Android 2.x einstellen können, können Sie in Ihrer App auf native Fragmente zurückgreifen.

    
CommonsWare 29.06.2012 14:47
quelle
2

Sie können die API-Ebene programmgesteuert mit diesem sehen:

%Vor%

Dann könnten Sie Ihren Code kopieren, um die gewünschte Klasse zu verwenden, indem Sie den gesamten Namen der Klasse in Ihren Code schreiben, zB android.app.DialogFragment oder android.support.v4.app.Fragment und nicht nur DialogFragment.

    
Stephane Mathis 29.06.2012 14:37
quelle