Я хотел бы использовать ViewAnimator
для выбора между двумя альтернативными дочерними представлениями. Меня не волнуют анимационные эффекты. Мой файл макета содержит ViewAnimator
с двумя дочерними кнопками stati c, которые отличаются только по своим id
и text
:
<ConstraintLayout ...>
<TextView
android:id="@+id/contactStatusView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ViewAnimator
android:id="@+id/contactsViewAnimator"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/multipleContactsButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="multipleContactsButton"/>
<Button
android:id="@+id/noContactsButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="noContactsButton"/>
</ViewAnimator>
</ConstraintLayout>
(Моя настоящая программа не использует кнопки для двух представлений ; это упрощение. Я удалил другие несущественные детали, но вы можете увидеть полный файл макета .)
По умолчанию отображается первое дочернее представление (т. е. кнопка с надписью "множественные контакты"). У меня есть код для отображения второго дочернего представления:
private fun processZeroContacts() {
contactsViewAnimator.displayedChild = R.id.noContactsButton
contactStatusView.text = "No matches for ${viewModel?.nickname}."
//contactsViewAnimator.showNext()
}
Когда этот метод вызывается, текст обновляется, но я все еще вижу первую кнопку (т. Е. Ту, что с текстом «multipleContactsButton»).
Я должен раскомментировать последнюю строку и явно вызвать contactsViewAnimator.showNext()
, чтобы перейти в альтернативное представление. Почему недостаточно изменить отображаемого ребенка? Я бы предпочел, чтобы мой код не зависел от порядка дочерних представлений в файле макета.