带有协程作用域的BindingAdapter



我不确定我是否在绑定适配器函数中正确使用CoroutineScope:

@BindingAdapter("srcByFileName")
fun setImageViewResource(imageView: ImageView, fileName: String?) {
if(fileName == null) return
CoroutineScope(SupervisorJob() + Dispatchers.IO).launch {
val bitmap = ImageStorageManager.getImageFromInternalStorage(imageView.context, fileName)
withContext(Dispatchers.Main) {
imageView.setImageBitmap(bitmap)
}
}
}

我需要将Bitmap的抓取移到另一个线程,因此需要协程。我只是想知道这样做是否正确。

如果你正在使用数据绑定,那么您的逻辑可能在您的ViewModel中,因此最好将viewModelScope传递给BindingAdapter函数。

只需添加第三个类型为CoroutineScope的参数,您可以通过预定义的viewModel对象从xml布局传递。

ViewModel中,你可以这样定义你的作用域:

val scope: CoroutineScope
get() = viewModelScope

在xml中:

<data>
<variable
name="viewModel"
type="ViewModelType" />
</data>
...
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcByFileName=@{viewModel.src}
app:coroutineScope="@{viewModel.scope}" />

相关内容

  • 没有找到相关文章

最新更新