如何将 String 转换为 Uri 并在 Android 中使用 DataBinding 应用于 ImageView 属性 src
How can I convert String to Uri and apply to ImageView attribute src with DataBinding in Android
我正在使用 FirebaseFirestore 并从中获取用户数据。
数据有名称、电子邮件和 imageUri。但 imageUri 类型不是 Uri。这是字符串。
所以我必须将数据转换为 Uri。
所以我用了 Uri.parse(String)
而且我正在使用 DataBinding 和 ViewModel。
这是片段。
var userImage = MutableLiveData<Uri>()
var userName = MutableLiveData<String>()
var userEmail = MutableLiveData<String>()
fun initializeUser() {
firebaseDB.collection(DATA_USERS).document(userId!!).get()
.addOnSuccessListener {
val user = it.toObject(User::class.java)
user?.let {
userImage.value = Uri.parse(user?.userImageUri)
userName.value = user?.userName
userEmail.value = user?.userEmail
}
}
}
这是XML。
<ImageView
android:id="@+id/info_userProfile"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="centerCrop"
android:src="@{viewModel.userImage}" />
名字和电子邮件很好用。但是 imageView 没有。
我该如何解决?
您可以使用 BindingAdapter
如下:
public class DataBindingAdapterUtil {
@BindingAdapter("android:src")
public static void setImageUri(ImageView view, Uri userImage) {
view.setImageURI(userImage);
}
}
我正在使用 FirebaseFirestore 并从中获取用户数据。 数据有名称、电子邮件和 imageUri。但 imageUri 类型不是 Uri。这是字符串。 所以我必须将数据转换为 Uri。 所以我用了 Uri.parse(String) 而且我正在使用 DataBinding 和 ViewModel。
这是片段。
var userImage = MutableLiveData<Uri>()
var userName = MutableLiveData<String>()
var userEmail = MutableLiveData<String>()
fun initializeUser() {
firebaseDB.collection(DATA_USERS).document(userId!!).get()
.addOnSuccessListener {
val user = it.toObject(User::class.java)
user?.let {
userImage.value = Uri.parse(user?.userImageUri)
userName.value = user?.userName
userEmail.value = user?.userEmail
}
}
}
这是XML。
<ImageView
android:id="@+id/info_userProfile"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="centerCrop"
android:src="@{viewModel.userImage}" />
名字和电子邮件很好用。但是 imageView 没有。
我该如何解决?
您可以使用 BindingAdapter
如下:
public class DataBindingAdapterUtil {
@BindingAdapter("android:src")
public static void setImageUri(ImageView view, Uri userImage) {
view.setImageURI(userImage);
}
}