Недавно читал статьи об утечках памяти и нашел одну у себя, а именно сохранение слушателя после удаления фрагмента.
Для слушателей внутри фрагмента все просто, а вот как удалить Listener в RecyclerView?
Пробовал переопределять метод onViewDetachedFromWindow, но он удаляет слушатели у элементов, которые вышли за пределы экрана.
class RecAdapterObj(var items: ArrayList<Item>) : RecyclerView.Adapter<RecHolderObj>() {
interface OnListFragmentListener {
fun onClickListFragment(item: Item)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecHolderObj {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.item_obj, parent, false)
return RecHolderObj(view)
}
override fun onBindViewHolder(holder: RecHolderObj, position: Int) {
holder.bind(items[position])
holder.itemView.setOnClickListener {
val mListener: OnListFragmentListener
try {
mListener = (it?.context as OnListFragmentListener)
} catch (e: ClassCastException) {
throw ClassCastException(it?.context!!.toString() + " must implement onClickListFragment")
}
mListener.onClickListFragment(items[position])
}
}
override fun onViewDetachedFromWindow(holder: RecHolderObj) {
super.onViewDetachedFromWindow(holder)
holder.itemView.setOnClickListener(null)
}
override fun getItemCount(): Int {
return items.size
}
}