web-dev-qa-db-fra.com

Disposition de contrainte Mise en page en panne: Tous les enfants de la disposition de contrainte doivent avoir un identifiant pour utiliser le jeu de contraintes

Après la mise à jour vers com.Android.support.constraint:constraint-layout:1.1.0

La mise en page de la contrainte se bloque en disant: 

Tous les enfants de la disposition de contrainte doivent avoir un identifiant pour utiliser la contrainte ensemble

J'ai défini les identifiants pour toutes les vues, même si cela se bloque.

Java.lang.RuntimeException: All children of ConstraintLayout must have ids to use ConstraintSet at Android.support.constraint.ConstraintSet.clone(ConstraintSet.Java:687) at com.zoho.notebook.views.SettingsViewNavBar.showNoteSettingsView(SettingsViewNavBar.Java:594) at com.zoho.notebook.views.SettingsViewNavBar.onClick(SettingsViewNavBar.Java:303)

Ce problème ne se produit qu'avec les tablettes.

8

J'ai eu le même bug dans mon code. Je possédais des identifiants pour toutes les vues au format xml, mais j’ajoutais manuellement une vue à la présentation des contraintes (une vue infobulle) avec 

constraintParent.addView(childView)

et bien que la vue ajoutée de manière dynamique soit toujours sur le parent si la présentation de la contrainte est redessinée (l'application passe à bg et est reprise), cette exception était déclenchée. 

Je l'ai corrigé en générant un identifiant de vue pour la vue dynamique comme celle-ci

CustomViewChildView childView = new CustomViewChildView()
childView.setId(View.generateViewId()); 

puis en l'ajoutant à la présentation de la contrainte.

14
free_style

Je viens de comprendre comment résoudre ce problème. Notez que vous devez déclarer toutes les vues sur ConstrainLayout ayant des identifiants définis. Consultez l'exemple ci-dessous:

Dans le cas 1, c'est un succès.

<Android.support.constraint.ConstraintLayout 
    Android:id="@+id/viewGroup"
    ...>
    <ImageView
        Android:id="@+id/imgId"
        ... />
    <TextView
        Android:id="@+id/txtId"
        ... />

Dans le cas 2 ci-dessous ne fonctionne pas.

<Android.support.constraint.ConstraintLayout 
        Android:id="@+id/viewGroup"
        ...>
        <ImageView
            Android:id="@+id/imgId"
            ... />
        <TextView
          // do not set ids
            ... />

J'espère que cela vous sera utile.

0
LVS