Android Почему и когда использовать ExecutePendingBindings

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

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

Приведите пример, демонстрирующий разницу в использовании и использовании. Спасибо

@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();
    
}
1
0
2 006
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Функция executePendingBindings() предназначена для немедленного связывания.

Когда изменяется переменная или наблюдаемый объект, привязка планируется изменить до следующего кадра. Однако бывают случаи, когда привязка должна выполняться немедленно. Для принудительного выполнения используйте метод executePendingBindings ().

Что вы имеете в виду под «изменением до следующего кадра»?

Nick 26.10.2018 10:08

Это означает, что представление становится недействительным или обновляется немедленно при изменении этого значения.

Rajat Beck 26.10.2018 10:40

Однако в recyclerView нет никаких различий, если поместить внутрь onBindViewHolder, но большинство людей считают важным разместить его там.

Nick 27.10.2018 18:38

Это похоже на совет по оптимизации. он заставляет привязку данных выполняться немедленно, что позволяет RecyclerView производить правильные измерения размера представления

Ответ принят как подходящий

Для более подробного объяснения вы можете обратиться к этому примеру.

Когда вы не используете executePendingBindings(), ваш список будет мерцать, когда вы его привязываете, например, когда вы открываете новый список, вы заметите этот эффект мерцания / дрожания, это связано с тем, что список заполняется, а затем в следующем кадре он привязан.

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

Вот пример безexecutePendingBindings()

Если вы видите, появляется эффект мерцания, так как представления инициализируются, затем выполняется привязка данных, а затем в следующем кадре происходит привязка представления.

Вот с участиемexecutePendingBindings()

Если вы видите здесь, эффекта мерцания нет, вы можете видеть, что список имеет обычную привязку и работает как единое целое.

Вы можете использовать executePendingBindings() только в потоке пользовательского интерфейса, это означает, что во время вызова onBindViewHolder вам нужно будет использовать его в привязке, это гарантирует, что вы вызываете его в пользовательском интерфейсе.

override fun onBindViewHolder(binding: MyBindingClass, position: Int, viewType: Int) {
        //Your binding code
        binding.executePendingBindings()
    }

Всегда вызывайте его в конце onBindViewHolder

Другие вопросы по теме