Сбой макета ограничения: все дочерние элементы макета ограничения должны иметь идентификаторы для использования набора ограничений - PullRequest
0 голосов
/ 25 мая 2018

После обновления до com.android.support.constraint:constraint-layout:1.1.0

Сбой макета ограничения, говоря:

Все дочерние элементы макета ограничения должны иметь идентификаторы для использования набора ограничений

Я установил идентификаторы для всех представлений даже тогда, когда происходит сбой.

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)

Эта проблема возникает только на планшетных устройствах.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Я просто выясняю, как решить эту проблему.Обратите внимание, что вы должны объявить, что все представления на ConstrainLayout имеют установленные идентификаторы, проверьте пример ниже:

В случае 1 это работает успешно.

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

В случае 2 ниже не работает.

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

Надеюсь, это поможет вам.

0 голосов
/ 22 марта 2019

Не забудьте также присвоить ConstraintLayout идентификатор .

Я забыл об этом, и он разбил мой код.Это не совсем очевидно из ошибки.

0 голосов
/ 15 июня 2018

У меня была та же ошибка в моем коде.У меня были идентификаторы для всех представлений в xml, но я вручную добавлял представление в макет ограничения (представление всплывающей подсказки) с

constraintParent.addView(childView)

, и в то время как динамически добавленное представление все еще остается в родительском, если ограничениемакет перерисован (приложение переходит в bg и возобновляется), это исключение сработало.

Я исправил это, сгенерировав идентификатор представления для динамического вида, подобного этому

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

, а затем добавив его в макет ограничения.

...