Привязка данных Android — попрощайтесь с FindViewById


Что-то новое в Android M, которое почти осталось незамеченным, — это библиотека привязки данных. Это может означать самое большое изменение в программировании Android с момента появления фрагмента.

Главная новость о привязке данных заключается в том, что она значительно упрощает реализацию архитектуры MCV в приложении для Android. Это глубоко, но сначала я хочу упомянуть небольшое улучшение, которое затронет всех программистов Android, независимо от того, используют ли они подход MVC. Поскольку новая функция реализована в виде библиотеки поддержки, вы даже можете использовать ее при таргетинге на более ранние версии Android.
Сколько раз в программе Android вы используете FindViewById для подключения кода и разметки XML?
Я предполагаю, что это такой шаблон, что вы можете набрать все это, назначение, приведение и вызов, во сне.
Вы, должно быть, задавались вопросом, почему Google не ввел автоматическое соединение между идентификатором представления, который вы определяете в файле макета XML, и переменной, используемой для хранения ссылки на объект представления, созданный инфлятором? В конце концов, .NET управляет им, и даже JavaScript / HTML5 в некотором роде.
Теперь с помощью библиотеки привязки данных вы можете автоматически иметь элементы пользовательского интерфейса, идентификаторы которых автоматически преобразованы в общедоступные переменные в автоматически сгенерированном классе привязки. Это означает, что вам больше не нужно использовать FindViewById!
Например, если у вас есть TextView в XML-макете Data Bound:

Затем после создания объекта привязки вы можете получить доступ к TextView, используя: binding.lastName. То есть класс привязки имеет переменную:
общедоступный финальный TextView lastName;
и это автоматически устанавливается для ссылки на объект TextView с идентификатором lastName.
Новая библиотека привязки данных расширяет язык разметки XML, так что она может устанавливать связь между переменными в вашем коде и объектами View, которые он определяет, а также наоборот. Это делает разметку Android XML более похожей на более полный XAML от Microsoft.
Например:

Сначала обратите внимание на использование нового тега , который превращает макет в файл макета привязки данных. Затем у нас есть тег , который используется для перечисления переменных в вашем коде, которые будут привязаны к элементам пользовательского интерфейса. В этом случае объявляется только одна переменная — user, которая является объектом типа User.
После у вас может быть стандартный файл макета, но теперь вы можете использовать @ {выражение} для определения значения любого свойства элемента пользовательского интерфейса. Выражение может использовать переменные, которые вы определили в теге . Итак, в этом примере для свойства text TextView будет автоматически установлено значение user.firstName. Конечно, чтобы это работало, в вашем коде должен быть объект с именем user со свойством firstName.
Чтобы привязка заработала, вам нужно изменить способ наполнения макета.
ActivityMainBinding binding = DataBindingUtil.setContentView (это, R.layout.main_activity);
Это возвращает объект привязки. Вы можете использовать это, как описано ранее, для доступа к любому из объектов View, у которых есть идентификаторы в файле макета. Вы также можете использовать его для привязки переменных в вашем коде к сгенерированным объектам View:
binding.setUser (пользователь);
где пользователь — это экземпляр класса User в вашей программе. В приведенном выше примере это установило бы все свойства пользовательского интерфейса, которые использовали свойства в пользовательском экземпляре. Также существует сгенерированный getUser, который может передавать свойства из пользовательского интерфейса в код.
Вы также можете настроить все так, чтобы при изменении свойств экземпляра автоматически обновлялись свойства пользовательского интерфейса, и наоборот — двусторонняя привязка.
Аргумент состоит в том, что с привязкой данных вам больше не нужно указывать идентификаторы элементов пользовательского интерфейса, потому что вы можете получить к ним доступ через геттеры и сеттеры в объекте привязки, но в любом случае утомительные дни FindViewById хорошо и действительно закончились.
Вы можете использовать новую библиотеку с помощью предварительной версии Android Studio 1.3, и вы можете использовать ее с версиями до Android M. Однако важно знать, что на данный момент все это работает ненадежно, документации нет. Это особенно полезно, и, если у вас нет времени тратить зря, лучше отложить дела по крайней мере до следующего или даже следующего выпуска.


Добавить комментарий