Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android @BindingAdapter不会自动更改化身_Android_Android Databinding_Android Glide_Android Mvvm - Fatal编程技术网

Android @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在我的布局中设置了头像,但是当更改一些值时,
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一切看起来都很好。您确定上载过程已成功完成且未发生异常吗?