Найти похожие представления из экземпляра DataBinding

Я использую Android DataBinding и ищу способ получить ссылки на представления/установки из экземпляра ViewDataBinding.

Я ищу способ найти представление(я) по уникальному идентификатору, в приведенном ниже коде можно ли получить все представления с одинаковым тегом "MYTAG" в xml из моего экземпляра привязки данных (в Activity, Класс фрагмента)?

android:tag = "MYTAG"

Мой фактический вариант использования заключается в том, что мне нужно знать все представления, для которых в xml установлен атрибут 'android:имя_перехода', чтобы сделать анимацию перехода сцены. (где мне нужно передать все общие представления и TransitionName в параметрах Bundle при запуске новой стартовой активности, которая будет анимироваться)

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

Это мой макет xml:

`

<data>
    <variable name = "item" type = "demo.com.entities.Recommendation" />
</data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id = "@+id/container"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:background = "?android:attr/selectableItemBackground"
        >



        <ImageView
            android:id = "@+id/room_card_icon"
            android:layout_width = "match_parent"
            android:layout_height = "0dp"
            android:scaleType = "fitXY"
            app:layout_constraintBottom_toTopOf = "@+id/guide75"
            app:layout_constraintTop_toTopOf = "parent"
            app:srcCompat = "@drawable/tour_placeholder"
            android:transitionName = "@{item.uid}"
            app:imageUrl = "@{item.image}"
            android:tag = "MYTAG"
            />

        <TextView
            android:id = "@+id/title_recommendations"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            app:layout_constraintBottom_toBottomOf = "@+id/room_card_icon"
            app:layout_constraintStart_toStartOf = "parent"
            android:transitionName = "@{`title`+item.uid}"
            android:text = "@{item.poi.name}"
            tools:text = "The Southern Ridges"
            android:tag = "MYTAG"
             />

        <TextView
            android:id = "@+id/typeTV"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            app:layout_constraintBottom_toTopOf = "@+id/title_recommendations"
            app:layout_constraintStart_toStartOf = "@+id/title_recommendations"
            android:transitionName = "@{`Category`+item.uid}"
            android:text = "@{item.poi.dataset}"
            tools:text = "Attractions"
            android:tag = "MYTAG" />

        <TextView
            android:id = "@+id/descriptionTV"
            android:layout_width = "0dp"
            android:layout_height = "wrap_content"
            app:layout_constraintEnd_toEndOf = "parent"
            app:layout_constraintStart_toStartOf = "parent"
            app:layout_constraintTop_toBottomOf = "@+id/guide75"
            android:text = "@{item.recommendation}"
            tools:text = "A magical place in nature. Take a morning walk or go for a sunset walk" />

           <androidx.constraintlayout.widget.Guideline
            android:id = "@+id/guide75"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal"
            app:layout_constraintGuide_percent = "0.75" />

    </androidx.constraintlayout.widget.ConstraintLayout>

`

Заранее спасибо!

0
0
214
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мой вопрос заканчивается как глупый вопрос! После того, как я прочитал это ? Я должен был решить это просто.

В любом случае, чтобы ответить на мой собственный вопрос:

Я должен получить корневое представление из экземпляра привязки ("mBinding.getRoot()" ), а затем могу перебирать дочерние представления, чтобы найти представления, почти используя что угодно, по любым атрибутам (например, по тегу или по имени перехода и т. д.).

В моем случае я могу напрямую получить все дочерние представления с установленным именем «transitionName».

   private fun getAllViewsWithTransitionName(root: ViewGroup): List<View> {
        val views = mutableListOf<View>()
        val childCount = root.childCount
        for (i in 0 until childCount) {
            val child = root.getChildAt(i)
            if (child is ViewGroup) {
                views.addAll(getAllViewsWithTransitionName(child))
            }

            val tagObj = child.transitionName
            if (!tagObj.isNullOrBlank()) {
                views.add(child)
            }

        }
        return views
    }

И теперь можно вызвать это, чтобы получить список всех представлений, у которых есть TransitionName

getAllViewsWithTransitionName(mBinding.root)

То же самое можно использовать для получения всех представлений с одним и тем же тегом, определенным в XML. Просто замените эту строку:

val tagObj = child.transitionName

к

val tagObj = child.tag

Спасибо!!!!

Другие вопросы по теме