ViewHolder 内的协程? [科特林]
Coroutine inside ViewHolder? [Kotlin]
我想知道是否有可能在 ViewHolder
中启动一个 Coroutine
,我的意思是,假设你在 OnBindViewHolder
中按下一个项目,你需要调用一个 [=14] =] 得到响应...我不知道我是否可以在其中使用 Coroutines
!
非常感谢
PS。或者像这样的东西
lblDeliveryMethod.setOnClickListener {
// API CALL
APICALLING()
suspend {
delay(1000)
withContext(Dispatchers.Main) {
if (APIRESPONSES) {
// DO SOMETHING
}
}
}
}
我可以使用这个插件修复它...它非常有用
https://github.com/satoshun/CoroutineAutoDispose
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder.itemView.autoDisposeScope.launch {
...
}
}
不要这样做,这是完全错误的。在专为它设计的组件内执行后台工作,例如 ViewModel,它有一个在配置更改后仍然存在的生命周期,并有一个与 ViewModel 的生命周期相关联的 CoroutineScope。
您的 ViewHolder 应该为托管 RecyclerView 的 Fragment/Activity 提供一种方法来注册 onClickListener,并在单击时调用 ViewModel 上的方法。
您可以将 lambda 作为列表项的构造函数参数,或者在列表项上使用 setOnClickListener() 方法,并使用 属性 来存储它。
我想知道是否有可能在 ViewHolder
中启动一个 Coroutine
,我的意思是,假设你在 OnBindViewHolder
中按下一个项目,你需要调用一个 [=14] =] 得到响应...我不知道我是否可以在其中使用 Coroutines
!
非常感谢
PS。或者像这样的东西
lblDeliveryMethod.setOnClickListener {
// API CALL
APICALLING()
suspend {
delay(1000)
withContext(Dispatchers.Main) {
if (APIRESPONSES) {
// DO SOMETHING
}
}
}
}
我可以使用这个插件修复它...它非常有用
https://github.com/satoshun/CoroutineAutoDispose
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder.itemView.autoDisposeScope.launch {
...
}
}
不要这样做,这是完全错误的。在专为它设计的组件内执行后台工作,例如 ViewModel,它有一个在配置更改后仍然存在的生命周期,并有一个与 ViewModel 的生命周期相关联的 CoroutineScope。
您的 ViewHolder 应该为托管 RecyclerView 的 Fragment/Activity 提供一种方法来注册 onClickListener,并在单击时调用 ViewModel 上的方法。
您可以将 lambda 作为列表项的构造函数参数,或者在列表项上使用 setOnClickListener() 方法,并使用 属性 来存储它。