ViewModel onCleared не вызывается в RecyclerView - PullRequest
0 голосов
/ 12 октября 2018

У меня есть адаптер с кодом ниже.Проблема в том, что onCleared () - метод ViewModel, кажется, никогда не вызывается для ViewModels для элементов списка.Существует ли специальный метод / флаг, который необходимо установить для очистки этих ViewModels?

class BaseRecyclerViewViewModelAdapter(
        private val lifecycleOwner: LifecycleOwner
) : RecyclerView.Adapter<BaseRecyclerViewViewModelViewHolder>() {

    var items: List<BaseRecyclerViewItemViewModel> = emptyList()
        set(value) {
            field = value
            notifyDataSetChanged()
        }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseRecyclerViewViewModelViewHolder {
        val binding: ViewDataBinding =
                DataBindingUtil.inflate(LayoutInflater.from(parent.context), viewType, parent, false)
        return BaseRecyclerViewViewModelViewHolder(binding)
    }

    override fun getItemCount() = items.size

    override fun onBindViewHolder(holder: BaseRecyclerViewViewModelViewHolder, position: Int) {
        with(holder.binding) {
            setVariable(BR.viewModel, items[position])
            setLifecycleOwner(lifecycleOwner)
            executePendingBindings()
        }
    }

    override fun getItemViewType(position: Int) = items[position].layoutId
}

1 Ответ

0 голосов
/ 12 октября 2018

И этого не будет.В соответствии с официальной документацией :

Когда действие владельца завершается, платформа вызывает метод onCleared () объектов ViewModel, чтобы очистить ресурсы.

Если вы хотите clear некоторые вещи в списке - вы должны сделать это вручную.

...