Erreur lors du gonflement du fragment de classe


161

J'obtiens l'erreur

Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment

lorsque je passe en mode portrait et paysage. J'utilise des fragments. Mon xml est:

 <LinearLayout android:id="@+id/mainLayout"
               android:orientation="horizontal"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content" >

    <ListView android:id="@+id/android:list"
              android:layout_height="wrap_content"
              android:layout_width="fill_parent"/> 

    <fragment android:id="@+id/fragmentDetails"
              android:layout_height="fill_parent"
              android:layout_width="fill_parent"
              class="de.androidbuch.activiti.task.TaskDetailsFragment"/> 
</LinearLayout>

Si je passe en mode paysage et portrait, tout fonctionne correctement. Mais lorsque je clique sur mon fragment (et que je peux voir mon fragment), puis que je passe à l'autre mode, j'obtiens l'erreur. Une idée de comment je peux le résoudre? J'ai trouvé des réponses ici, mais aucune de celles-ci ne m'a aidé ...

06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): java.lang.RuntimeException: Unable to start activity         
ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}:   android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3097)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:997)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.os.Looper.loop(Looper.java:126)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.main(ActivityThread.java:3998)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at java.lang.reflect.Method.invokeNative(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at java.lang.reflect.Method.invoke(Method.java:491)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at dalvik.system.NativeStart.main(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.Activity.setContentView(Activity.java:1771)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at de.androidbuch.activiti.task.TaskActivity.onCreate(TaskActivity.java:83)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     ... 12 more

Conservez-vous des fichiers de mise en page séparés dans vos dossiers de mise en page et de mise en page?
Nathan Fig le

Pouvez-vous fournir le journal des erreurs complet, y compris les lignes après "Impossible de démarrer l'activité ..."
Dave

@Nathan Fig: oui je fais .. mais obtenir les erreurs ..
tsync

@Dave: voilà ... une idée?
tsync

Vous avez besoin d'un code de mise en page paysage, et vos appels à setContentView sont également utiles, ainsi que la façon dont vous déclenchez l'activité en mode portrait, comme je suppose que vous l'êtes. Pour le moment, il ne semble pas y avoir suffisamment d'informations. L'exemple de FragmentLayout dans les démos d'API peut vous aider car il semble que vous fassiez quelque chose de similaire.
PJL

Réponses:


131

Comme l'a dit hdemirchian, assurez-vous d'utiliser:

import android.support.v4.app.Fragment;

Et assurez-vous également que l'activité qui utilise le (s) fragment (s) s'étend FragmentActivityau lieu de la normale Activity,

import android.support.v4.app.FragmentActivity;

pour obtenir la FragmentActivityclasse.


12
Cela a beaucoup voté, mais pour moi, cela se bloque lors de la reprise de l'application, et j'utilise déjà v4 Fragment et v4 FrsgmentActivity - pour être plus précis AppCompatActivity.
joseph

4
Ce n’est pas une solution. import android.support.v4.app.Fragment; ne change rien. En fait, il s'agit même d'une importation inutilisée et inutile.
f470071

7
Merci, une note latérale est que AppCompatActivity est un descendant de FragmentActivity.
abedfar


96

L'exception android.view.InflateException: Binary XML file line: #... Error inflating class fragmentpeut se produire si vous manipulez à l' getActivity()intérieur de votre fragment avant d' onActivityCreated()être appelé. Dans ce cas, vous recevez une mauvaise référence d'activité et vous ne pouvez pas vous y fier.

Par exemple, le modèle suivant est faux:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
{
    final View view = inflater.inflate(R.layout..., container, false);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...); - another problem: button is null

    return view;
}

Corriger le motif n ° 1

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
{
    final View view = inflater.inflate(R.layout..., container, false);

    Button button = view.findViewById(R.id...);
    button.setOnClickListener(...);

    return view;
}

Corriger le motif n ° 2

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...);
}

@MaximKorobov Vous pouvez appeler à l' getActivity()intérieur onActivityCreated()ou dans n'importe quelle méthode de cycle de vie ultérieure, mais avant onDestroyView().
Grigori A.

Merci beaucoup, cela a énormément aidé!
Shotgun Ninja

Merci :-) cela m'a sauvé beaucoup de temps :)
user1007522

J'aimerais en savoir plus à ce sujet, je reçois un crash sporadique et je pense que cela pourrait être le problème. Bien que la plupart du temps, le code fonctionne bien, il est donc difficile de le savoir
Daniel Wilson

Le modèle 2 aurait pu le résoudre pour moi. Doigts croisés. Merci pour ça.
joseph


36

J'ai eu la même erreur. Je creusais toute la journée, je sais pas mais je pense que j'ai essayé ~ 25 solutions sur ce problème. Aucun n'a fonctionné jusqu'à 2 heures du matin, j'ai découvert qu'il me manquait cette ligne dans les applications manifest xml:

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

Cette ligne était à l'intérieur de l' <application>étiquette. J'espère vraiment que cela aide quelqu'un. GL.


3
Mon héros. Les gens comme vous sont tellement géniaux!
capdragon

5
Expliquez ce qui se passe s'il vous plaît. Quel est l'avantage de cette ligne?
Mansour Fahad

2
Merci, sauve ma journée. Chaque échantillon d'utilisation de Google map sur Android fonctionne différemment, je me demande s'il existe une norme.
user2812866

22

J'ai eu le même problème. La solution pour moi était l'ordre de super.onCreate et setContentView dans FragmentActivity

L'ordre suivant fonctionne bien:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.fc_activity_list_profiles);

3
Pourquoi est-ce que cela résout le problème?
Spencer

1
Dans une méthode JAVA, superdoit toujours être appelée au début de la méthode.
Stéphane Bruckert

11
@ StéphaneBruckert ce n'est pas toujours le cas qu'il super.method()faut appeler en premier. Cela dépend de ce que fait la méthode de la super classe. Dans ce cas, FragmentActivityil effectue une initialisation nécessaire pour faire setContentViewfonctionner correctement. Cependant, dans une autre méthode (par exemple onKeyUp), vous voudrez peut-être effectuer un travail conditionnel avec l'action, mais revenez super.onKeyUpdans ce cas, vous voudrez très probablement appeler super.onKeyUpà la toute fin de la fonction.
CoatedMoose

Il est probablement également intéressant de noter que super()(le constructeur de la superclasse) doit être la première fonction appelée dans tout constructeur de classes enfants, mais son appel n'est pas nécessairement obligatoire (cela dépendrait entièrement de la classe étendue).
CoatedMoose

17

Les fragments ne peuvent pas être imbriqués dans XML

J'ai appris cela à la dure - si vous imbriquez une <fragment>balise basée sur une mise en page XML dans un fragment (potentiellement) chargé dynamiquement FragmentManager, alors vous commencez à obtenir des erreurs étranges, en essayant de gonfler votre fragment xml.

Il s'avère que cela n'est pas pris en charge - cela fonctionnera bien si vous le faites uniquement par l' FragmentManagerapproche.

J'avais ce problème parce que j'essayais de charger un fragment dans un <DrawerLayout>fichier xml, et cela provoquait un plantage dans la onCreateView()méthode lorsque j'ai fait sauter la pile arrière.


N'est-ce toujours pas pris en charge? En date duappcompat-v7:23.3.0
thanassis

oui je suis un fragment d'imbrication dans xml. J'examinerai cela.
KDeogharkar

Mais il existe des solutions / hacks pour le problème: stackoverflow.com/a/14695397/860488
Morten Holmgaard

2
Voir la note à la fin de cette section pour confirmation: developer.android.com/about/versions/…
Philippe

Je ne sais pas pourquoi la solution est si simple. pour moi, il suffit de remplacer <fragment>par <frameLayout>travaillé. Je suis toujours en train de le comprendre. - stackoverflow.com/a/19167009/5477548
yoad w

16

J'avais le même problème que vous. Aucun des conseils ci-dessus ne m'a aidé. Plus tard, j'ai découvert que tout ce que j'avais à faire était de corriger mes importations depuis:

import android.app.Fragment;

à:

import android.support.v4.app.Fragment;

Merci, cette solution a fonctionné pour moi aussi. J'ai lutté avec ce problème pendant 2 jours. Enfin, votre solution a fonctionné pour moi.Merci hdemirchian ..
Lakshmanan

Tu es incroyable! Mon problème était opposé - l'assistant Fragment importe android.support.v4.app.Fragment par défaut. Et mon activité principale s'étend à android.app.Activity.
Industrial Control Freak

12

As-tu essayé:

 <fragment
            android:name="de.androidbuch.activiti.task.TaskDetailsFragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

1
Vous nous avez montré 1 fichier xml, mais vous devriez en avoir 2 dans / layout / et un dans layout-land /
Blundell

12

Assurez-vous qu'aucune exception n'est déclenchée dans la méthode onCreateView du fragment. Si une exception est déclenchée dans cette méthode, logcat n'affichera pas les détails exacts de l'exception, mais affichera toujours le message:

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.fragment" 
on path: DexPathList[[zip file "/data/app/com.package/base.apk"],
nativeLibraryDirectories=[/data/app/com.package/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

Juste pour ajouter ce que Lei dit, mettez du code à essayer dans votre oncreateview et découvrez la cause profonde réelle. Merci Lei!
Swaroop

6

Si vous TaskDetailsFragmentétendez android.app.Fragment, changez onCreateView().

Renvoyez votre vue que vous souhaitez afficher dans le fragment ou convertissez votre mise en page en vue à l'aide de LayoutInflater et renvoyez-la.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View mainview = inflater.inflate(R.layout.main, null);
    return mainview;
}

J'espère que cela fonctionne. :)


6

Vérifiez votre chemin de classe, il se peut que l'inflateur de vue ne trouve pas la définition de votre classe telle que définie dans votre xml class = "de.androidbuch.activiti.task.TaskDetailsFragment" le chemin ci-dessus peut être erroné.


6

Je recevais cette erreur pour différentes raisons.

Étapes à suivre pour reproduire:

~> Mon problème était que j'ai créé une toute nouvelle application vierge.

~> J'ai ensuite généré un fragment personnalisé à partir du menu Fichier ~> Nouveau fichier.

~> J'ai procédé à la personnalisation du fragment en ajoutant des dispositions et des boutons, etc.

~> Référencé le nouveau fragment personnalisé dans le fichier activity_my.xml généré automatiquement qui a été généré pour moi lors de la création de l'application. Cela a permis au XML de générer les objets pour moi.

Voici le piège lors de la génération du fragment personnalisé via le menu Fichier ~> Nouveau fichier, il génère automatiquement un stub de fonction d'interface et le place au bas du fichier de classe de fragment.

Cela signifie que votre classe MyActivity doit implémenter cette interface. Si ce n'est pas le cas, l'erreur ci-dessus se produit uniquement lors du référencement du fragment à partir de xml. En supprimant complètement la référence du fragment dans le XML et en créant le fragment via du code dans le fichier de classe MyActivity.java, Logcat génère une erreur plus concise expliquant le problème en détail et se plaignant de l'interface. Ceci est démontré dans l'activité de modèle de projet + fragment. Bien que <~ ce modèle de projet ne génère pas le stub d'interface.


5

Pour moi, c'est après avoir fait défiler la trace de la pile, j'ai trouvé que je manquais l'autorisation pour android.permission.ACCESS_NETWORK_STATE

après avoir ajouté cette autorisation, il a été corrigé


1
Not to self: " faites défiler toute la trace de la pile. Merci @Gil.
Batandwa

4

Si vous avez des fichiers de mise en page distincts pour les modes portrait et paysage et que vous obtenez une erreur d'inflation chaque fois que vous changez d'orientation après avoir cliqué sur un élément, il y a très probablement une différence entre vos fichiers de mise en page.

Lorsque vous obtenez l'erreur, est-ce uniquement lorsque vous cliquez sur l'élément en mode paysage ou uniquement en mode portrait ou les deux? Votre activité TaskDetailsFragment utilise-t-elle un fichier de mise en page qui pourrait présenter des écarts entre les modes paysage et portrait?


Merci pour votre réponse .. eh bien je n'ai qu'un fragment en mode paysage et non en mode portrait. Je ne peux donc cliquer qu'en mode paysage pour voir le fragment. Et après avoir
basculé

C'est presque certainement le problème - vous avez une vue en mode portrait qui ne peut pas être trouvée en mode paysage. L'ajout du fragment au paysage résout-il le problème?
Nathan Fig

1
Vous pouvez avoir des vues qui n'existent pas dans les deux fichiers - c'est tout l'intérêt d'avoir des dispositions distinctes -land et -port. Cependant, vérifiez les identifiants - j'avais l'ID manquant dans mon fichier portrait et j'obtenais cette erreur lors du changement.
maxpolun

4

Si vous ajoutez de Fragmentmanière statique, c'est-à-dire en xml, vous avez peut-être manqué de l'implémenter OnFragmentInteractionListenerdans votre Activityclasse. Ensuite, la mise en œuvre de l'interface résoudrait le problème. Si vous ajoutez Fragmentdynamiquement, c'est-à-dire en classe java, ce n'est pas la solution. Parce que l'EDI lui-même ne vous permettra pas de continuer sans implémenter les interfaces requises.


3

Mon problème dans ce cas était une simple instance d'une exception de pointeur nul stupide dans l'une de mes méthodes qui était appelée plus tard dans le cycle de vie. Cela provoquait pour moi l'exception "Erreur de gonflement du fragment de classe". En bref, n'oubliez pas de vérifier plus bas la trace de la pile d'exceptions pour une cause possible.

Une fois que j'ai résolu l'exception du pointeur nul, mon fragment s'est bien chargé.


3

Aucune des solutions mentionnées ci-dessus ne m'a aidé. Dans le journal, j'ai pu trouver le détail de l'exception comme mentionné ci-dessous:

06-19 16:20:37.885: E/AndroidRuntime(23973): Caused by: java.lang.RuntimeException: API key not found.  Check that /meta-data/ android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/ is in the application element of AndroidManifest.xml.

Je l'ai fait et mon code fonctionnait!

<meta-data  android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCl1yGPZ3mpxxxxxxxAz2R-t7zcWVzrHUL9k"/>
</application>

3

Si vous ne voulez rien changer et optez pour la balise " fragment "

fais ça,

<fragment
 android:visibility="gone" (Visibility will not work, just helps in removing frag from xml viewer)(If you want the visibility to be gone make it in your fragment root element visibility=gone)
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:name="com.example.YOUR_FRAGMENT" (This is important)
 />

2

Avait le même type d'erreur, où exactement le même message d'erreur dans logcat était affiché. J'avais besoin d'apporter des modifications dans le chemin de construction Java situé sous Project->Properties. J'avais inclus des bibliothèques liées à Google Maps comme android-support-v4.jaret google-play-services.jar; cependant je manquais d'inclure ceux-ci 'Build class path'dans le 'Order and Export'menu d'options. Peut-être que l'erreur réside ici.

Essayez d'inclure des bibliothèques dans le chemin de la classe de construction.

L'ordre dans lequel les classes sont construites peut également déclencher l'erreur, donc mon conseil est également d'essayer de réorganiser l'ordre du chemin de construction. L'erreur a disparu lorsque je l'ordre suivant: 'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'. La dernière unité contient les fichiers jar mentionnés précédemment.


1

Dans votre fichier xml, utilisez simplement un au lieu de la balise. Le gonfleur essaie de créer un android.app.Fragment à partir duquel échouera sur l'API <10. Vous devez donc créer un groupe de vues d'un type différent.



1

assurez-vous que vous avez utilisé celui-ci

<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyBEwmfL0GaZmdVqdTxxxxxxxx-rVgvY" />

pas ça..

<meta-data 
         android:name="com.google.android.gms.version" 
          android:value="AIzaSyBEwmfL0GaZmdVqdTCvxxxxxxx-rVgvY" /> 

1

J'ai juste eu cette même erreur. La raison de la mienne était la visibilité de ma classe de fragments. Il a été défini par défaut, devrait être public.


1

Pourriez-vous publier les fragments onCreateet les onCreateViewméthodes? J'avais exactement la même exception qui était causée par une exception dans la onCreateméthode de fragment , quand j'ai corrigé ce problème, cela a corrigé le fragment de classe de gonflage d'erreur.


1

Je recevais cette erreur dans Android Studio, le problème était que mon fragment avait une disposition relative alors que le code de la fonction OnCreateView était

mDrawerListView = (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);

votre code fait-il la même chose?


1

Si vous voulez hériter de l' AppCompatActivity , vous pouvez faire quelque chose comme ceci- Dans l'activité xml, utilisez un FrameLayout comme celui- ci-

<FrameLayout
    android:id="@+id/result_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/progress_frame"/>

et dans l'activité onCreate-

final FragmentManager supportFragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = supportFragmentManager.beginTransaction();
    ft.replace(R.id.result_fragment, fphResultActivityFragment, "result fragment");
    ft.commitAllowingStateLoss();

Merci cela a aidé. Je ne sais pas pourquoi j'ai pu utiliser <fragment> dans ma mise en page avec succès dans d'autres applications sur lesquelles j'ai travaillé, mais cela ne fonctionnait pas ici!
SingularityFuture

notez simplement que cela peut fonctionner mais c'est généralement pour les fragments dynamiques non statiques
Tanner Summers

1

J'ai eu la même erreur, mais mon problème était que mon fragment n'avait pas d'identifiant dans la mise en page XML de l'activité parent.


1

Après une journée de lutte, j'ai trouvé une vérification de scénario peut-être que vous faites face au même,

Si tout fonctionne comme le code google, veuillez vérifier le fichier manifeste dans mon cas, j'ai ajouté une clé géographique et une clé de carte, c'est pourquoi une exception se produit,

Remarque - n'ajoutez pas deux clés dans le fichier manifeste supprimer la clé de mappage

meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>

ci-dessus et ajoutez ce code.

 <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/auto_location"/>

 <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>

1

J'avais un problème similaire; après avoir exécuté l' exemple AdMob , j'ai essayé d'insérer des annonces dans mon application, provoquant cette erreur:

01-02 16:48:51.269    8199-8199/it.dndc.BreathPlot E/AndroidRuntime FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity
 Caused by: android.view.InflateException: Binary XML file line #57: Error inflating class fragment

La solution est la suivante: vous ne pouvez pas insérer le fragment d'une annonce dans une ListActivity. Au lieu de cela, je pourrais l'ajouter à un FragmentActivity et à un ActionBarActivity sans aucun problème.

Ma suggestion est la suivante: partez de l'exemple AdMob et ajoutez-y votre application existante: j'aurais gagné beaucoup de temps !!!


1

Si vous utilisez l'obfuscation avec le composant de navigation, vous devez exclure le fragment d'Android et vos arguments. Ajoutez ces lignes à vos fichiers proguard-rules:

# Exclude the fragments and argType for navigation component.
-keep class * extends androidx.fragment.app.Fragment{}
-keep class com.safetonet.presentation.features.parent.adddevice.model.PresentableAddDeviceData
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.