Невозможно загрузить изображения в ImageView, используя Glide - PullRequest
0 голосов
/ 28 июня 2019

Я разработчик для iOS и довольно плохо знаком с Kotlin / Android, поэтому я немного растерян и растерян.

У меня есть ViewPager во фрагменте, который должен загрузить изображение из URL для каждого элемента в пейджере. Каждый элемент в пейджере является экземпляром фрагмента пейджера. Я использую Glide для загрузки изображений. Код, который я использую для визуализации изображений, был взят из класса деятельности, где он работает без проблем. Однако во фрагменте пейджера изображения не загружаются.

Вот мой файл макета для фрагмента элемента пейджера:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:context="some.path.StatCardPagerItem">

    <ImageView
            android:id="@+id/statCardImageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

</FrameLayout>

В моем фрагменте у меня есть onCreateView:

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view = inflater.inflate(R.layout.card_pager_item, container, false)
    val imgView = view.statCardImageView

    card?.url?.let {
        GlideApp.with(imgView.context)
            .load(card?.url)
            .placeholder(R.drawable.placeholder_avatar)
            .into(imgView)
    }
    return view
}

Когда загружается пейджер, отображается правильное количество элементов пейджера, но они содержат только аватары-заполнители. Смущает то, что код для загрузки изображений из Glide работает, если он содержится в Activity, но не во фрагменте. Может кто-нибудь сказать мне, что я здесь делаю не так? Спасибо!

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Вы передаете контекст ImageView.Согласно документации Glide, вы должны передать экземпляр Fragment в метод with.

Попробуйте с:

GlideApp.with(this)
            .load(card?.url)
            .placeholder(R.drawable.placeholder_avatar)
            .into(imgView)

Ссылка: https://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/Glide.html#with-android.app.Fragment-

public staticRequestManager with (представление View)

Начните загрузку с Glide, которая будет связана с жизненным циклом фрагмента, фрагмента или действия, содержащего представление.Предполагается, что фрагмент или фрагмент содержат представление, если представление является дочерним элементом представления, возвращаемого методом Fragment.getView ()}.

Этот метод не будет работать, если представление не прикреплено.Предпочитайте варианты Activity и Fragment, если вы не загружаете их в подкласс View.

Этот метод может быть неэффективен для больших иерархий.Подумайте о том, чтобы запоминать результат после прикрепления представления.

0 голосов
/ 28 июня 2019

Вам необходимо передать контекст действия в with() метод

GlideApp.with(getActivity())
        .load(card?.url)
        .placeholder(R.drawable.placeholder_avatar)
        .into(imgView)
...