Android, контролирующий видимость, и я получаю сообщение об ошибке - PullRequest
0 голосов
/ 15 апреля 2019

в привязке данных андроида просто я хочу контролировать видимость представления, проверяя параметр viewmodel как profilePicUrl

Решение 1:

, когда profilePicUrl пустое представление, должно быть пропущено, иначедолжно быть видно, например:

<data>
    <import type="android.view.View"/>
    <import type="android.text.TextUtils"/>

    <variable name="viewModel" type="xx.xxxxx.xxxxxxx.MyViewModel"/>
</data>

...

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="@{TextUtils.isEmpty(viewModel.profilePicUrl) ? View.GONE : View.VISIBLE}"
    >

я получаю эту ошибку:

error: '@{TextUtils.isEmpty(viewModel.profilePicUrl)? View.GONE : View.VISIBLE' is incompatible with attribute visibility (attr) enum [gone=2, invisible=1, visible=0].

Решение 2:

после получения этой ошибки я пытаюсь проверить другое решение дляПодход, который, например:

BindingAdapters класс:

object BindingAdapters {
    @BindingAdapter("visibleIf")
    @JvmStatic
    fun changeVisibility(@NonNull imageView: ImageView, visible: Boolean) {
        if (visible) {
            imageView.visibility = View.VISIBLE
        } else {
            imageView.visibility = View.GONE
        }
    }
}

XML-макет:

<data>
    <import type="android.view.View"/>
    <import type="android.text.TextUtils"/>

    <variable name="viewModel" type="xx.xxxxx.xxxxxxx.MyViewModel"/>
</data>

...

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:visibleIf="@{TextUtils.isEmpty(viewModel.profilePicUrl)}"
    >

я получаю эту ошибку:

error: attribute visibleIf (aka xxx.xxxxx.xxxxxxxx:visibleIf) not found.

1 Ответ

0 голосов
/ 15 апреля 2019

Вы уверены, что правильно включили привязку данных?Ваш код верен, поэтому нет причин, по которым он не должен работать.

Пожалуйста, убедитесь, что этот код добавлен в файл Gradle модуля вашего приложения:

dataBinding {
    enabled = true
}

ДополнительноЯ бы порекомендовал добавить это в gradle.properties файл:

android.databinding.enableV2=true

Здесь вы можете увидеть аналогичный вопрос .

Относительно второго решения, иногда импортируяПомогает объект, содержащий методы адаптера:

<import type="com.your.package.name.BindingAdapters" />

Также убедитесь, что вы добавили этот атрибут в тег layout:

xmlns:app="http://schemas.android.com/apk/res-auto"
...