63 votes

Fragments dépréciés dans Android P

Je regardais le documentation et j'ai trouvé ceci

Cette classe a été supprimée au niveau P de l'API.

Pourquoi les fragments sont-ils dépréciés dans Android P ?

17 votes

Ceux qui ont donné un vote négatif ou qui envisagent de le faire, peuvent-ils donner une raison valable ? Je pense que c'est une vraie question et qu'elle peut nous apporter des réponses pertinentes.

1 votes

Les questions sur les raisons de faire quelque chose n'ont de sens que si vous demandez à celui qui le fait. Dans ce cas, vous devez demander à Google.

2 votes

Est-il encore utile d'utiliser Fragments en 2018, maintenant que seule l'implémentation du support fonctionne ? Que faut-il utiliser à la place ?

31voto

qtmfld Points 1263

La réécriture dans la bibliothèque de support 27.1.0

Le message moyen de Ian (28 février 2018) nous donne une explication à ce sujet. Il est développeur du cadre Android chez Google.

Chargeurs dans la bibliothèque de support 27.1.0

Pour la bibliothèque de support 27.1.0, j'ai réécrit les éléments internes de LoaderManager, la classe qui alimente l'API des chargeurs, et j'ai voulu expliquer le raisonnement derrière les changements et ce à quoi il faut s'attendre pour l'avenir.

Chargeurs et Fragments, une histoire
Dès le début, les Chargeurs et les Fragments ont été assez étroitement liés à la hanche. Cela signifie qu'une grande partie du code dans FragmentActivity et Fragment était là pour supporter les Chargeurs, malgré le fait qu'ils soient en fait assez indépendants.

Ce qui a changé dans la version 27.1.0
Avec la version 27.1.0, la dette technique des chargeurs a été considérablement réduite :

Remarque : évidemment, ces changements ne s'appliquent qu'aux chargeurs de bibliothèque de support. Si vous utilisez les chargeurs du framework Android, veuillez passer aux chargeurs de la bibliothèque de support dès que possible. Aucune correction de bogue ou amélioration n'est prévue pour les API des chargeurs de framework.

Il semble que le code dans Fragment et FragmentActivity a été remanié afin de faire des chargeurs une dépendance optionnelle.

Selon le bon de sortie la nouvelle mise en œuvre est basée sur Lifecycle .

Changements importants
L'implémentation sous-jacente de  Chargeurs  a été réécrit pour utiliser  Cycle de vie .

Composants de l'architecture

Sur Bibliothèque de support 26.1.0 , Fragment  et  FragmentActivity a adopté Lifecycle .

Il s'agit d'une version spéciale visant à intégrer la bibliothèque de support aux cycles de vie des composants d'architecture. Si vous n'utilisez pas la bibliothèque Lifecycles, vous n'avez pas besoin de faire la mise à jour depuis la version 26.0.2. Pour plus d'informations, consultez les notes de version de Architecture Components.

Changements importants

  • Fragment et FragmentActivity (la classe de base pour AppCompatActivity) implémentent maintenant l'interface LifecycleOwner de Architecture Components.

En revanche, Fragment et Activité dans Android P n'ont pas implémenté l'interface LifecycleOwner .

Sur le post Google+ (mentionné dans La réponse de ThanosFisherman ), Ian a fait un commentaire :

vous ne pouvez pas modifier le code d'un cadre après qu'il a été expédié - il est littéralement figé dans le temps. Cela signifie qu'il n'y a pas de nouvelles fonctionnalités et, surtout, pas de correction de bogues. Ce n'est pas une bonne expérience pour les développeurs, en particulier lorsque nous disposons d'une version entièrement supportée, à jour et rétrocompatible dans la bibliothèque de support.

Je pense que c'est la raison pour laquelle Android P n'adopte pas Lifecycle . Par conséquent, Fragment est déprécié dans Android P.

13voto

Markymark Points 674

Au cas où quelqu'un chercherait le moyen d'instancier les fragments par le nom de la classe.

A l'ancienne :

Fragment.instantiate(context, fragmentClass)

Nouvelle façon :

val fm: FragmentManager = ...
fm.fragmentFactory.instantiate(ClassLoader.getSystemClassLoader(), fragmentClass)

Utilisation d'une extension :

Nom du fichier : FragmentManagerExt.kt

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager

fun FragmentManager.instantiate(className: String): Fragment {
    return fragmentFactory.instantiate(ClassLoader.getSystemClassLoader(), className)
}

Exemple d'utilisation :

val fragment = supportFragmentManager.instantiate(fragmentClassName)

0 votes

Merci bro pour votre supportFragmentManager solution

10voto

ThanosF Points 784

Les fragments de bibliothèque de support sont là pour rester. Google vous encourage à utiliser les versions de la bibliothèque d'assistance pour bénéficier d'un comportement cohérent à tous les niveaux d'API, de corrections de bogues rétroportées et de la prise en charge de Lifecycle et ViewModel.

Ancien lien de référence (mort)

Nouveau lien de référence

0 votes

Google+ est fermé, alors où peut-on trouver des informations à ce sujet ?

1 votes

1voto

RAHUL Points 62

Utilisez supportFragmentManager à la place de fragmentManager sur Android x .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X