Android Зачем использовать executePendingBindings в RecyclerView - PullRequest
0 голосов
/ 29 октября 2018

В последнее время я использовал привязки данных и наткнулся на метод executePendingBindings. Документация показывает немного об этом, и я не могу понять, как это работает или когда его использовать.

Многие разработчики используют executePendingBindings внутри обратного вызова onBindViewHolder, но я сам не вижу никаких различий в утилизаторе при его использовании или нет.

Может кто-нибудь объяснить, почему его важно использовать в утилизаторе ?? Спасибо

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {

            Customer customer= List.get(position).second;
            ((CustomerViewHolder)holder).binding.setCustomer (customer)

            ((CustomerViewHolder)holder).binding.executePendingBindings();


}

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Есть еще одна вещь, которую я должен упомянуть. Когда вы вызываете executePendingBindings (), ваш список не будет таким гладким, как без этого вызова. Поскольку executePendingBindings () выполняет действия в потоке пользовательского интерфейса. Итак, представьте список из 500 элементов. И каждый раз, когда вы вызываете этот метод в пользовательском интерфейсе. Вы получите «Приложение может выполнять слишком много работы в своем основном потоке».

0 голосов
/ 29 октября 2018

Внесение некоторых изменений в вашу привязку не означает, что она будет немедленно влиять на вашу View. Изменение вещей в привязке означает, что вы действительно планируете эти изменения, которые будут применены в ближайшем будущем. Это по многим причинам, производительность является одной из них.

Представьте, что в ваших xmls есть сложные выражения. Вы не хотите выяснять все, что связано с переменными привязки, прежде чем устанавливать их все. Это было бы пустой тратой ресурсов.

Вы можете узнать больше об этом в самом сгенерированном связывающем классе Java. Я предлагаю вам прочитать это.

Вызов executePendingBindings означает, что вы по сути заставляете фреймворк делать все, что ему нужно сделать до сих пор в привязке, прямо в момент ее вызова.

Вы не должны делать это в своем адаптере, если ваш случай не требует этого. Некоторые люди делают это, чтобы быть уверенным, что все правильно настроено на элементе, прежде чем двигаться дальше. Так, например нет такого случая, как onBind, вызываемый снова до того, как был выполнен предыдущий раунд привязок ... или что-то подобное ...


РЕДАКТИРОВАТЬ 1:

Также ... не забывайте, что планирование выполнения изменений (на ближайшее будущее) - это то, что позволяет вам setVariables на binding из потоков, отличных от потока UI. Потому что установка переменной не касается самого View.


РЕДАКТИРОВАТЬ 2:

Самый простой способ взглянуть на сгенерированные классы Java - это:

  1. Навигация -> Файл

navigate-file

  1. Введите имя файла привязки в UpperCamelCase, а затем Binding (например, если ваш макет activity_main, введите ActivityMainBinding)

activity_main_binding

...