как установить ImageView с помощью glide и привязки данных: MVVM

#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 только что добавил разрешение пользователя Интернета, и это решает мою проблему, большое вам спасибо