onViewDetachedFromWindow()
RecyclerView.AdapterのonViewDetachedFromWindow()メソッドは、リスト要素がスクロールで画面外へ出ると呼ばれる。
アニメーションの停止や、タイマーのキャンセルなど、要素が非表示になったタイミングでリソースを解放したい場合に利用できる。
使い方
RecyclerView.Adapterを継承したクラスでonViewDetachedFromWindow()をオーバーライドする。
class SampleAdapter : RecyclerView.Adapter<SampleAdapter.ViewHolder>() {
class ViewHolder(val binding: ItemSampleBinding) : RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemSampleBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.binding.animationView.playAnimation()
}
override fun onViewDetachedFromWindow(holder: ViewHolder) {
super.onViewDetachedFromWindow(holder)
holder.binding.animationView.cancelAnimation()
}
override fun getItemCount() = 10
}
上記の例では、onBindViewHolder()でアニメーションを再生し、onViewDetachedFromWindow()でアニメーションをキャンセルしている。
onViewRecycled()との違い
RecyclerView.AdapterにはonViewRecycled()というメソッドもあり、ViewHolderが再利用されるときに呼ばれる。
| メソッド | 呼ばれるタイミング |
|---|---|
onViewDetachedFromWindow() | ViewHolderが画面外に出たとき |
onViewRecycled() | ViewHolderが再利用プールに戻されるとき |
スクロールによって要素が隠れてすぐに処理したい場合はonViewDetachedFromWindow()、再利用直前に処理したい場合はonViewRecycled()を使う。
参考
\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/
