ConstraintLayout by Code - Установить ограничение слишком рано
Добрый день,
Мне нужно показать список карт верности, один на других с небольшим полем, и, нажимая на него, он полностью раскрывается при скольжении.
Во фрагменте я использую ConstraintLayout
где-то на экране, который я заполняю кодом. Я добавляю все дочерние элементы (общее количество, известное после вызова WS) в ConstraintLayout, затем я использую ConstraintSet
установить начальные ограничения.
Но при создании исходного фрагмента я обнаружил, что должен применить TimeOut между ConstraintLayout
население и создание Constraints
(отвратительно, правда?)
добавление каждой карты...
val card = FrequencyCardView()
fid_card_container.addView(card as View)
listCard.add(card)
Затем создайте ограничения:
val set = ConstraintSet()
val containerId = fid_card_container.id
set.clone(fid_card_container)
listCard.forEachIndexed { index, card ->
val marginTop = when (index) {
0 -> 0
else -> (listCard[index -1] as ViewGroup).height / 4
}
val rootId = if (index == 0) containerId else (index - 1)
set.connect(card.getId(), TOP, rootId, TOP, marginTop)
set.connect(card.getId(), ConstraintSet.START, containerId, ConstraintSet.START, 0)
set.connect(card.getId(), ConstraintSet.END, containerId, ConstraintSet.END, 0)
card.setOpen(false)
}
// Apply the changes
set.applyTo(fid_card_container)
Любая идея, почему мне нужно применить любой тайм-аут между добавлением Childs в ConstraintLayout и затем добавить ограничения?
Любое лучшее решение, что это уродливый TimeOut? Спасибо
1 ответ
Я нашел лучший способ.
Похоже, что создание ограничений должно быть сделано в потоке пользовательского интерфейса. Вот почему он работает с timeout
,
Итак, я изменил timeout
позвонить по телефону Анко:
doAsync {
uiThread {
resetCardLayout()
}
}