我不确定我是否在绑定适配器函数中正确使用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}" />