[Разработка под Android] Как использовать Android Data Binding в пользовательских представлениях? (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
. . .Как вы знаете, Data Binding Library - это отличная часть библиотеки Android Jetpack, позволяющая сократить количество шаблонного кода и связать представления с данными более эффективным способом, чем это было возможно ранее. В этой статье я собираюсь объяснить, как можно использовать привязку данных в наших пользовательских представлениях.. . . Начало работыЧаще всего мы создаем пользовательские представления для повышения производительности, настройки и т.д., но если вы используете привязку данных в своих проектах, или напротив не используете ее в своих пользовательских представлениях, это не очень хорошо. Возможно, это выглядит примерно так:
class MyCustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
init {
attrs?.let {
val typedArray =
context.obtainStyledAttributes(it, R.styleable.MyCustomView)
// some attr handling stuffs...
typedArray.recycle()
}
}
}
Но если вы хотите использовать пользовательское представление с компонентом привязки данных, то нет необходимости обрабатывать эти атрибуты. Автоматический выбор методаКогда вы определяете атрибут следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name="currencyCode" format="string" />
</declare-styleable>
</resources>
библиотека привязки данных имеет возможность автоматического выбора метода, то есть для атрибута с именем currencyCode библиотека автоматически пытается найти метод setCurrencyCode(arg), принимающий в качестве аргумента совместимые типы. Пространство имен атрибута не учитывается, при поиске метода используется только имя атрибута и тип. С другой стороны, если автоматический выбор метода не работает для имени вашего атрибута или вы хотите изменить метод сеттера для вашего атрибута, вы можете использовать методы привязки. Методы привязкиМетоды привязки дают вам возможность изменить сеттер для атрибута вашего пользовательского представления. Вы можете поместить эти методы над своим классом, используя аннотацию @BindingMethods, или создать пустой класс с этой аннотацией.
class MyCustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
private val currencyFormatter = NumberFormat.getCurrencyInstance(Locale.getDefault())
//..
fun setCurrency(currencyCode: String?) {
if (currencyCode.isNullOrEmpty())
return
currencyFormatter.currency = Currency.getInstance(currencyCode)
}
//..
}
определите функцию, названную как угодно, затем просто поместите ее с атрибутом в методы привязки.
@BindingMethods(
value = [
BindingMethod(
type = MyCustomView::class,
attribute = "currencyCode",
method = "setCurrency"
)
]
)
class BindingMethods
с помощью этого способа вы можете задать различные имена сеттеров для вашего атрибута. Адаптеры привязкиЕсли у вас есть функции с несколькими параметрами в вашем пользовательском представлении, и необходимо использовать эти функции с привязкой данных, то в этом случае следует использовать адаптеры привязки.
@BindingAdapter(
value = ["paddingEnd", "paddingTop", "paddingStart", "paddingBottom"],
requireAll = false
)
fun MyCustomView.setPaddingRelative(
paddingEnd: Int = 0,
paddingTop: Int = 0,
paddingStart: Int = 0,
paddingBottom: Int = 0
) {
this.setPaddingRelative(paddingStart, paddingTop, paddingEnd, paddingBottom)
}
Для настройки отступов можно создать адаптер привязки, как показано в примере.. . .Вот и все, спасибо за чтение! Если вам понравилась эта история, пожалуйста, нажмите на стрелочку вверх и поделитесь ею, чтобы помочь другим!Если у вас есть какие-либо комментарии, не стесняйтесь связаться со мной в Twitter.Перевод материала подготовлен в рамках запуска курса "Android Developer. Professional".Всех желающих приглашаем на двухдневный интенсив по теме: "Полный coverage. Покрываем Android приложение юнит/интеграционными/UI тестами"
===========
Источник:
habr.com
===========
===========
Автор оригинала: Furkan Aşkın
===========Похожие новости:
- [Python, Тестирование веб-сервисов] Почему мне так нравится использовать Python для автоматизации тестирования? (перевод)
- [.NET, Разработка игр, Unity] Предупреждение для разработчиков о грядущих критических изменениях в движке (перевод)
- [Информационная безопасность, Реверс-инжиниринг] Использование Windbg для обратной разработки
- [JavaScript, Node.JS] Как работает Middleware в Express?
- [Администрирование баз данных] Ключевые аспекты при выборе базы данных для вашего приложения
- [Разработка под iOS, Разработка под Android, Аналитика мобильных приложений] Когортный анализ подписок: как понять, что экономика сходится?
- [Разработка игр, Разработка под Android, Продвижение игр] Открылся набор в Indie Games Accelerator и Indie Games Festival от Google Play
- [Программирование, Symfony] Развертывание приложения Symfony в AWS Lambda (перевод)
- [Программирование, Разработка под Android] Онлайн-митап для Android-разработчиков
- [Java] Кросс-браузерное тестирование в Selenium (перевод)
Теги для поиска: #_razrabotka_pod_android (Разработка под Android), #_android, #_jetpack, #_bindingadapter, #_blog_kompanii_otus (
Блог компании OTUS
), #_razrabotka_pod_android (
Разработка под Android
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 04:21
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
. . .Как вы знаете, Data Binding Library - это отличная часть библиотеки Android Jetpack, позволяющая сократить количество шаблонного кода и связать представления с данными более эффективным способом, чем это было возможно ранее. В этой статье я собираюсь объяснить, как можно использовать привязку данных в наших пользовательских представлениях.. . . Начало работыЧаще всего мы создаем пользовательские представления для повышения производительности, настройки и т.д., но если вы используете привязку данных в своих проектах, или напротив не используете ее в своих пользовательских представлениях, это не очень хорошо. Возможно, это выглядит примерно так: class MyCustomView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : FrameLayout(context, attrs, defStyleAttr) { init { attrs?.let { val typedArray = context.obtainStyledAttributes(it, R.styleable.MyCustomView) // some attr handling stuffs... typedArray.recycle() } } } <?xml version="1.0" encoding="utf-8"?>
<resources> <declare-styleable name="MyCustomView"> <attr name="currencyCode" format="string" /> </declare-styleable> </resources> class MyCustomView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : FrameLayout(context, attrs, defStyleAttr) { private val currencyFormatter = NumberFormat.getCurrencyInstance(Locale.getDefault()) //.. fun setCurrency(currencyCode: String?) { if (currencyCode.isNullOrEmpty()) return currencyFormatter.currency = Currency.getInstance(currencyCode) } //.. } @BindingMethods(
value = [ BindingMethod( type = MyCustomView::class, attribute = "currencyCode", method = "setCurrency" ) ] ) class BindingMethods @BindingAdapter(
value = ["paddingEnd", "paddingTop", "paddingStart", "paddingBottom"], requireAll = false ) fun MyCustomView.setPaddingRelative( paddingEnd: Int = 0, paddingTop: Int = 0, paddingStart: Int = 0, paddingBottom: Int = 0 ) { this.setPaddingRelative(paddingStart, paddingTop, paddingEnd, paddingBottom) } =========== Источник: habr.com =========== =========== Автор оригинала: Furkan Aşkın ===========Похожие новости:
Блог компании OTUS ), #_razrabotka_pod_android ( Разработка под Android ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 04:21
Часовой пояс: UTC + 5