Есть ли обратный вызов, когда экземпляр RecylerView.ViewHolder должен иметь значение G C 'd? - PullRequest
2 голосов
/ 29 мая 2020
class MyRecyclerViewHolder : RecyclerView.ViewHolder {


  fun onBind(data: Data) {
    // launching an asynchronous action
  }
}

Мне нужно отменить действие asyn c, которое я запускаю, когда onBind(..) вызывается снова в том же экземпляре MyRecyclerViewHolder, или если MyRecyclerViewHolder готов к G C 'd по какой-либо причине.

Очевидно, я могу определить, когда onBind(..) вызывается снова, но как я могу зарегистрироваться, чтобы узнать, когда экземпляр MyRecyclerViewHolder(..) готов для G C, чтобы я мог отменить asyn c action?

EDIT: Другой способ подумать об этом - представить, что ViewHolder имеет следующий API:

interface ViewHolder {

  // because you have constructor access, there's no need for `onCreate(..)`

  // may be called multiple times
  fun onBind(data: Data)

  fun onDestroy() // called once when it is no longer relevant
}

Как я могу получить уведомление, что мой ViewHolder должен быть «уничтожен» - он больше не актуален для пользовательского интерфейса?

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Вы можете попробовать использовать метод Object.finalize, но его вызов не гарантируется:

Почему не вызывается finalize?

0 голосов
/ 29 мая 2020

Возможно, вы ищете что-то вроде этого:

override fun onViewAttachedToWindow(holder: Type) {
}

override fun onViewDetachedFromWindow(holder: Type) {
}

onViewAttachedToWindow будет вызываться каждый раз, когда зритель попадет на экран. onViewDetachedFromWindow будет вызываться каждый раз, когда зритель покидает экран.

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