Существует очень простая функция привязки адаптера.
@JvmStatic
@BindingAdapter("app:test")
fun testBind(v: View, test: Int) {
//test...
}
Если вы примените этот код в XML, он обычно будет выглядеть так:
Функция автозаполнения работает нормально, а xml не выводит никаких предупреждений.
Однако эта функция bindingadapter выдает предупреждение во время компиляции.
warning: Application namespace for attribute app:test will be ignored.
Многие другие сообщения говорят об удалении namepsace для этого предупреждения.
Я удалил пространство имен из функции bindingadapter вместе с ним.
@JvmStatic
@BindingAdapter("test")
fun testBind(v: View, test: Int) {
//test...
}
Это не распечатает предупреждение во время компиляции.
Но на этот раз xml выводит предупреждение.
Также, когда пространство имен существует, функция автозаполнения, которая работала нормально, вообще не работает.
Из всех методов, которые я пробовал, единственный способ разрешить все два предупреждения - указать пространство имен как android.
Есть ли другой путь? Пространство имен Android кажется недоразумением, так как это базовая функция привязки в Android, а не пользовательская функция привязки.
Если вы используете один аргумент в методе адаптера bindong, удалите пространство имен в строке @BindingAdapter (...), после этого добавьте пространство имен bind: перед вызовом строки в XML.
@JvmStatic
@BindingAdapter("icon")
fun setImage(view: ImageView, imageID: Int) {
}
и bind:icon="@{vm.iconID}"
Если я использую несколько атрибутов, это не сработало.