Ваш ConstraintLayout может иметь циклическую зависимость. Вот как я получил это же исключение в макете, который не содержал привязки данных. Причиной оказалось два компонента, где встретились две цепочки, и ограничения каждого компонента ссылались на другой. Не могу показать слишком много кода здесь, потому что это для работы, но вот суть этого:
<!-- some components chained layout_constraintBottom_toTopOf here -->
<!-- this is the last element in the chain: -->
<ImageView
android:id="@+id/app_logo"
app:layout_constraintBottom_toTopOf="@+id/hostNameField" />
<!-- This is the first element in a new chain: -->
<EditText
android:id="@+id/hostNameField"
app:layout_constraintTop_toBottomOf="@+id/app_logo" />
<!-- more components chained layout_constraintTop_toBottomOf here -->
Средство расчета ограничений в ConstraintLayout версии 1.0.2 смогло сделать это разумным образом - NPE запустился, когда я обновился до 1.1.0.
Исправление состояло в том, чтобы объединить две цепи. Я начал с ImageView и заменил app:layout_constraintBottom_toTopOf
на app:layout_constraintTop_toBottomOf
, ссылаясь на элемент над ним. Затем я проделал то же самое с этим элементом, продвигаясь вверх по цепочке, пока не добрался до верхнего элемента и не заменил его ограничение на app:layout_constraintTop_toTopOf="parent"
.