Библиотека привязки данных Android против расширений Kotlin Android - PullRequest
0 голосов
/ 08 мая 2018

Я читаю о том, как работает архитектура MVVM и как использовать справку библиотеки привязки данных Android.

В общих чертах я понимаю, что привязка данных Android создает связь между уровнем пользовательского интерфейса и базовой моделью данных, которая содержит отображаемую информацию.

Kotlin Android Extensions - это еще один плагин Kotlin, который позволит вам восстанавливать представления из действий, фрагментов и представлений. Плагин создаст дополнительный код, который позволит вам получить доступ к представлениям в макете XML, как если бы они были свойствами с именем идентификатора, который вы использовали в определении макета.

В чем разница между использованием библиотеки привязки данных Android и расширений Kotlin Android? Они для разных целей? Они дополняют друг друга, каким образом?

Спасибо за ваши ответы.

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Kotlin Android Extensions не обозначает только привязку просмотра. Он содержит и другие функции. Но я предполагаю, что вы говорите о возможностях привязки / кэширования представлений в Kotlin Android Extensions и задаетесь вопросом, нужно ли нам все еще связывать данные, поскольку мы уже избавились от вызовов findViewById с помощью синтетических свойств Kotlin. Это был вопрос, который я задал себе, и мой вывод таков: да, привязка данных все еще стоит использовать.

Из официальной документации :

Библиотека привязки данных создает неизменяемое поле в привязке класс для каждого вида, который имеет идентификатор в макете ... Библиотека извлекает представления, включая идентификаторы из иерархии представлений, за один проход. Этот механизм может быть быстрее, чем вызов метода findViewById () за каждый вид в макете.

Таким образом, привязка данных не вызывает findViewById для представлений один за другим. С другой стороны, синтетические классы Kotlin все еще вызывают findViewById для представлений под капотом, но он вызывает его только один раз для каждого представления и кэширует ссылку на представление для следующих вызовов. (Вот статья об этом)

Кроме того, привязка данных может предложить не только кэширование представления. Вы можете использовать теги данных для передачи данных в реализацию привязки и объявить их в своем XML, вместо того, чтобы устанавливать их программно. Таким образом, вы можете избавиться от стандартного кода, который вы используете для заполнения данных, таких как «setText», «setImageResource» и т. Д. Вы можете установить прослушиватели событий из xml, используя привязку данных. Вы также можете придумать свои собственные атрибуты с помощью пользовательских адаптеров привязки. При полном использовании он может значительно сократить код Java / Kotlin.

Редактировать: Похоже, что команда Google Android рекомендует против использования синтетических свойств kotlin. Эта статья обобщает обсуждение этой проблемы. И вы можете увидеть в новом курсе Udacity , подготовленном Google, что они используют привязку данных в качестве рекомендуемой практики.

0 голосов
/ 25 марта 2019

Я категорически не согласен с пунктами, упомянутыми выше. возможно, потому что я ненавижу писать логику в XML. поэтому в обоих комментариях упоминается использование тегов <data>, которых нет в Kotlin Android Extensions (KTX). с Kotlin и KTX вы можете сделать лучше, чем тег данных.

скажем, у нас есть

data class Person(val name:String, 
                   val phone:String,
                   val isMale:Boolean,
                   val isMarried:Boolean)

в упражнении или фрагменте мы можем сделать

fun updateView(data:Person){
    with(data){

     nameTextField.text = if(isMale){
                            "Mr. $name" 
                          } else {
                             if(isMarried){
                              "Mrs. $name"
                             }else{
                              "Miss $name"
                             }
                          }
     phoneTextField.text = phone
    }
 }

в привязке данных, вы должны сделать

android:text='@{person.isMale ? "Mr."+user.name: ((user.isMarried ? "Mrs. " : "Miss. ") + user.name)}'

Код KTX намного чище, чем то, что вы должны делать с привязкой данных для достижения того же результата. когда вам нужны условия для установки значений для просмотра, привязка данных становится ужасной. так что для меня Kotlin Android Extensions работают лучше. Мне нравится мой код чистый. вы все равно можете использовать оба решения, которые вы принимаете.

0 голосов
/ 08 мая 2018

Оба, Kotlin Android Extensions и Android Data Binding Library помогают исключить использование findViewById.

Но есть и другие вещи, которые могут дополнять друг друга. Для уточнения, с помощью библиотеки Android Data Binding вы можете «задавать» модели в своих XML-файлах, которые затем можно напрямую использовать для установки значений для представлений в макете. См. , как тег <data> можно использовать с библиотекой привязки данных.

Расширения Kotlin для Android не предусматривают этого. В то же время расширения Kotlin для Android предоставляют некоторые удивительные функции, такие как аннотация @parcelize, чтобы сделать классы пригодными для разделения практически без стандартного кода и т. Д.

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

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