方法
RecyclerView.Adapter
の onViewDetachedFromWindow
で検知できます。
サンプル
SampleAdapter.kt
import android.content.Context
import android.databinding.DataBindingUtil
import android.support.v7.widget.RecyclerView
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import tokyo.tt.databinding.RecyclerItemSampleBinding
class SampleAdapter(
context: Context,
private val texts: List<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
val TAG: String = SampleAdapter::class.java.simpleName
}
private val layoutInflater = LayoutInflater.from(context)
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is SampleViewHolder -> holder.bind(texts[position])
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return SampleViewHolder(DataBindingUtil.inflate(layoutInflater, R.layout.recycler_item_sample, parent, false))
}
override fun getItemCount() = texts.size
override fun onViewDetachedFromWindow(holder: RecyclerView.ViewHolder) {
super.onViewDetachedFromWindow(holder)
// 画面外に出たアイテムの位置も参照できます
Log.d(TAG, "adapterPosition = ${holder.adapterPosition}")
}
inner class SampleViewHolder(private val binding: RecyclerItemSampleBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(text: String) {
binding.textView.text = text
}
}
}