用刀柄注入 viewModel

Inject viewModel with hilt

我想使用 Hilt 将我的 viewModel 注入到 RecyclerView 中。 它可以注入,但 viewModel 在 recyclerView 销毁时不会销毁。 使用 hilt 在 recyclerView 中注入 viewModel 的最佳方法是什么?

不应将视图模型注入到适配器中,正如我在评论中所读到的那样,您可以找到比这更好的方法,
假设您有一个包含很多行的适配器,每行当用户点击它,它执行网络调用。
首先,创建一个 interface

interface Click {
fun onClick(index: Int, item: Model)
}

在您的适配器中,初始化它的一个实例,然后在您的 onBindViewHolder

中使用它
yourview.setOnClickListener {v-> interface.onClick()}

不要忘记初始化界面,无论您在何处使用它 (Activity/Fragment/...)。
这是比对每一行都使用 ViewModel 更好的解决方案,这可能会导致 SystemLeaks。

最好的方法是创建单独的适配器和 viewholder classes,然后您可以将 viewModel 注入该 viewholder class 而不是适配器。 要销毁 viewModel,您应该通过观​​察父生命周期手动完成。当父生命周期事件 ON_DESTROY 在适配器 class.

的初始化块中执行类似的操作
parentLifecycle.addObserver(object : LifecycleObserver {

            @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
            fun onParentDestroy() {
                recyclerView?.run {
                    for (i in 0 until childCount) {
                        getChildAt(i)?.let {
                            (getChildViewHolder(it) as BaseItemViewHolder<*, *>)
                                .run {
                                    onDestroy()
                                    viewModel.onManualCleared()
                                }
                        }
                    }
                }
            }
  }

此处onManualCleared()函数调用onCleared().