Android @BindingAdapter不会自动更改化身
我已经使用@bindingAdapter在我的布局中设置了头像,但是当更改一些值时,Android @BindingAdapter不会自动更改化身,android,android-databinding,android-glide,android-mvvm,Android,Android Databinding,Android Glide,Android Mvvm,我已经使用@bindingAdapter在我的布局中设置了头像,但是当更改一些值时,bindingAdapter不会加载图像。这是我的viwmodel class ProfileViewModel constructor(val repository: ProfileRepository, val mContext: Context, photo: Photo = Photo("")): ViewModel() { var avatar: ObservableField<Stri
bindingAdapter
不会加载图像。这是我的viwmodel
class ProfileViewModel constructor(val repository: ProfileRepository, val mContext: Context, photo: Photo = Photo("")): ViewModel() {
var avatar: ObservableField<String> = ObservableField("")
var responseListener: ResponseListener? = null
var fileUploadEvent: FileEvents? = null
fun getAvatarUrl() : ObservableField<String> {
return avatar
}
companion object {
@BindingAdapter("avatarUrl")
@JvmStatic
fun loadAvatar(imageView: ImageView, avatarUrl: String) {
Glide.with(imageView.context)
.load(avatarUrl)
.placeholder(R.mipmap.profile)
.apply(RequestOptions.circleCropTransform())
.into(imageView)
}
}
fun onProfileImageUpload(uri: Uri) {
fileUploadEvent!!.onUpload()
Coroutines.main {
try {
val imageResponse = repository.updateProfileAvatar(
getImageForUpload(uri, "avatar")
)
avatar.set(imageResponse.data.avatar.thumbnail)
fileUploadEvent!!.onUploadSuccess(avatar.get()!!)
} catch(e : Exception) {
fileUploadEvent!!.onUploadFailure(e.toString())
}
}
}
}
类ProfileViewModel构造函数(val存储库:ProfileRepository,val mContext:Context,photo:photo=photo(“”):ViewModel(){
变量化身:ObservableField=ObservableField(“”)
var responseListener:responseListener?=null
var fileUploadEvent:FileEvents?=null
fun getAvatarUrl():ObservableField{
返回化身
}
伴星{
@BindingAdapter(“avatarUrl”)
@JvmStatic
趣味加载虚拟形象(imageView:imageView,虚拟形象:字符串){
Glide.with(imageView.context)
.load(阿瓦塔鲁尔)
.占位符(R.mipmap.profile)
.apply(RequestOptions.circleCropTransform())
.into(图像视图)
}
}
有趣的onProfileImageUpload(uri:uri){
fileUploadEvent!!.onUpload()
共程{
试一试{
val imageResponse=repository.updateProfileAvatar(
getImageForUpload(uri,“化身”)
)
设置(imageResponse.data.avatar.缩略图)
fileUploadEvent!!.onUploadSuccess(avatar.get()!!)
}捕获(e:例外){
fileUploadEvent!!.onUploadFailure(例如toString())
}
}
}
}
在我的XML中,我定义了如下名称空间
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="com.kreeti.gogal.ui.profile.ProfileViewModel" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/profile_root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="15dp">
<TextView
android:id="@+id/welcome_header"
style="@style/glacial_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/welcome"
android:textColor="@color/violet"
android:textSize="32sp" />
<LinearLayout
android:id="@+id/profile_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="horizontal">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
>
<ImageView
android:id="@+id/avatar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:scaleType="center"
android:onClick="@{viewmodel::onAvatarClick}"
app:avatarUrl="@{viewmodel.avatarUrl}" />
<ProgressBar
android:id="@+id/avatar_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone" />
</FrameLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>
我从api获取照片url,我希望在通过viewbinding获取phot时更改照片。更改url时如何加载图像?我需要做一些侦听器吗?使用bindingModel.notify()请告诉我如何使用它以及在哪里使用它?@SuvodipMondal,你能发布你的布局吗?当然可以。。。updated@SuvodipMondal一切看起来都很好。您确定上载过程已成功完成且未发生异常吗?