#android #mvvm #android-glide
#Android #mvvm #android-glide
Вопрос:
Как мы можем использовать привязку данных в Android, чтобы поместить изображение в ImageView с помощью Glide? Я видел какой-то пример, но мне никто не помог. Мне нужно установить URL-адрес в glide, но я застрял во многих определениях или примерах учебников.
Я попытался установить изображение с помощью xml и привязки данных, но оно не работает
Другая проблема: изображение для просмотра изображения, установленное при нажатии кнопки, я хочу, чтобы оно было установлено при запуске приложения.
public class LoginViewModel extends BaseObservable {
private User user;
private String successMessage = "Login was successful";
private String errorMessage = "Email or Password not valid";
private String URL_1 = "https://sftextures.com/texture/2704/0/2703/wallpaper-pattern-primitives-shades-of-grey-smaller-details-abstract-huge-texture-256x256.jpg";
private String URL_2 = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Breathe-preferences-desktop-wallpaper.svg/128px-Breathe-preferences-desktop-wallpaper.svg.png";
@Bindable
private String toastMessage = null;
@Bindable
private String url = null;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
notifyPropertyChanged(BR.url);
}
public String getToastMessage() {
return toastMessage;
}
private void setToastMessage(String toastMessage) {
this.toastMessage = toastMessage;
notifyPropertyChanged(BR.toastMessage);
}
public void setUserEmail(String email) {
user.setEmail(email);
notifyPropertyChanged(BR.userEmail);
}
@Bindable
public String getUserEmail() {
return user.getEmail();
}
@Bindable
public String getUserPassword() {
return user.getPassword();
}
public void setUserPassword(String password) {
user.setPassword(password);
notifyPropertyChanged(BR.userPassword);
}
public LoginViewModel() {
user = new User("","");
}
public void onLoginClicked() {
if (isInputDataValid()) {
setUrl(URL_1);
setToastMessage(successMessage);
}
else {
setUrl(URL_2);
setToastMessage(errorMessage);
}
}
public boolean isInputDataValid() {
return !TextUtils.isEmpty(getUserEmail()) amp;amp; Patterns.EMAIL_ADDRESS.matcher(getUserEmail()).matches() amp;amp; getUserPassword().length() > 5;
}
}
xml
<ImageView
android:layout_width="123dp"
android:layout_height="123dp"
android:id="@ id/image"
android:background="@color/colorAccent"
bind:imgUrl="@{viewModel.url}"/>
MainActivity
@BindingAdapter({"bind:imgUrl"})
public static void setProfilePicture(ImageView imageView, String imgUrl) {
Glide.with(imageView.getContext()).load(imgUrl).into(imageView);
}
Комментарии:
1. Для
BindingAdapter
меня это выглядит нормально. У вас есть интернетuser-permission
вAndroidManifest
?2. используете ли вы
xmlns:bind="http://schemas.android.com/apk/res-auto"
при импорте xml?3. @Blackbelt только что добавил разрешение пользователя Интернета, и это решает мою проблему, большое вам спасибо