TGViewer
Dolgo.polo Dev | Денис Долгополов Dolgo.polo Dev | Денис Долгополов @dolgo_polo_dev · 2.18K subscribers
Post #30 1.64K
​​Где стоит создавать слушатели для элементов RecyclerView — onCreateViewHolder vs onBindViewHolder

У каждого ViewHolder может быть одна или несколько кнопок, на которых будут висеть листенеры (onClick, onTouch, а может и что-то потяжелее)

Пойдём от противного — почему не стоит выставлять слушатели в onBindViewHolder:

• как известно, в onBindViewHolder приходит holder, в котором лежит view, которая переиспользуется для разных элементов списка. получается, вы каждый раз будете создавать новый объект листенера и вешать его на вьюху, у которой уже есть листенер. создаем лишний объект — теряем память, теряем время

• в onBindViewHolder приходит position, которая есть у холдера в момент байндинга. А что если элемент будет перемещен, допустим, в следствие Drag-and-drop от пользователя?
onBindViewHolder заново вызван не будет, а position изменилось

значит, правильно создавать и вешать слушатель в onCreateViewHolder, получая position через holder.getAdapterPosition() внутри слушателя

также стоит проверять getAdapterPosition() != RecyclerView.NOPOSITION:

position = -1 = NO
POSITION, когда RecyclerView проводит перерасчет позиции холдера (в связи с перемещением\удалением\смещением)

....

также существуют методы:

• getAbsoluteAdapterPosition()
• getBindingAdapterPosition()
• getLayoutPosition()
• getPosition()

в чем между ними разница?
  • 👍 5
More from @dolgo_polo_dev
  1. Jun 22, 2026Медиалента — то, что пользователь реально ощущает физически: скроллы, зумы, тапы. Любые ми…
  2. Jun 20, 2026👮‍♀️ Как VPN видит трафик всех приложений? технически VPN на андроид — это сервис внутри…
  3. Jun 13, 2026Дуров опять не старается 🍌🍌🍌 Пару месяцев назад команду телеграма ругали за то, что они…
  4. May 24, 2026🧬Может ли VPN ускорить интернет? Интуиция подсказывает — точно нет Добавляется лишний сер…
  5. May 22, 2026кто же знал, что основным выгодополучателем max 📲 окажется habr.com любая статья набирает…
  6. May 6, 2026вы снова не туда воюете сначала все пушили Compose типо верстать в 2 раза быстрее, можно с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →