Невозможно изменить отображаемый дочерний элемент ViewAnimator через установщик - PullRequest
0 голосов
/ 24 апреля 2020

Я хотел бы использовать 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(), чтобы перейти в альтернативное представление. Почему недостаточно изменить отображаемого ребенка? Я бы предпочел, чтобы мой код не зависел от порядка дочерних представлений в файле макета.

...