DataBinding: передать идентификатор ресурса в пользовательский атрибут строки представления? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть пользовательское представление с настраиваемым атрибутом, определенным как:

<declare-styleable name="CustomView">
    <attr name="stringAttribute" format="string"/>
</declare-styleable>

Я хотел бы передать строковый ресурс в это представление при его инициализации, чтобы я мог получить его через obtainStyledAttributes и сразу примените его к представлению.

Однако, поскольку строковый ресурс является динамическим c, я не могу найти способ передать его представлению без использования привязывающего адаптера.

Можно ли передать идентификатор строкового ресурса в пользовательское представление, не полагаясь на адаптер привязки?

Желаемое решение будет выглядеть примерно так (где идентификатор ресурса является динамическим c):

app:stringAttribute="@{context.getString(R.string.value)}"

1 Ответ

0 голосов
/ 06 февраля 2020

Возможно, я не правильно понял ваш вопрос, но вы можете настроить привязку, используя BindingAdapter . Например, вы можете установить строковый ресурс следующим образом:

TestBindings.kt

@BindingAdapter("stringRes")
fun setStringRes(view: TextView, @StringRes resource: Int) {
    view.text = view.context.getString(resource)
}

TestViewModel.kt

data class TestViewModel(@StringRes val text: Int)

тест. xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="viewModel"
            type="... .TestViewModel" />
    </data>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        stringRes="@{viewModel.text}"/>

</layout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...