Как использовать Glide с GridView? (Android / Котлин) - PullRequest
0 голосов
/ 28 июня 2018

Я успешно построил gridView, используя этот код:

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {

    var inflater = mContext!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    var row = inflater.inflate(R.layout.image_cell, null)  

    row!!.glide_img_cell_id.setImageResource(R.drawable.cookie_icon_60)

    return row
}

Возвращает тестовое изображение, как и в gridView Тем не менее, мои реальные данные изображения получены с urls, поэтому я использую Glide. Я уже проверил свои реальные данные, используя Glide, и он работает нормально. Тем не менее, я не могу заставить его работать в моем GridView. Это мой измененный код:

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {

    var recipe = this.recipeArray!![position].recipeImage
    var inflater = mContext!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    var row = inflater.inflate(R.layout.image_cell, null)  

    row!!.glide_img_cell_id.loadImageUrl(recipe) as GlideImageView

    return row
}

Я делаю то же самое, за исключением того, что теперь я использую Glide. Еще одна вещь, которая меня смущает, это convertView. Некоторые уроки, которые я смотрел, используют его, другие нет. Что это? Очевидно, что в первом примере мне это не нужно, так как оно работает.

UPDATE При приведении к GlideImageView приложение вылетает с kotlin.Unit cannot be cast to com.bumptech.glide.Glide, без приведения оно просто ничего не показывает.

UPDATE2 Как и предполагалось, я изменил код на следующий, но приложение все еще пустое и ничего не показывает:

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
    var recipe = this.recipeArray!![position].recipeImage

    var inflater = mContext!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    var row = inflater.inflate(R.layout.image_cell, null)  
    Glide.with(mContext).load(recipe).fitCenter().centerCrop().into(row!!.glide_img_cell_id)

    return row
}

Это кажется правильным?

UPDATE Все еще не решили это. Посмотрели в XML-файл, который должен содержать изображение. Выглядит так:

<?xml version="1.0" encoding="utf-8"?>

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/glide_img_cell_id"
    android:layout_centerInParent="true"
    android:scaleType="centerCrop"
    />

Также использовали <com.master.glideimageview.GlideImageView вместо <ImageView, но все равно ничего.

Также пробовал это:

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
    var recipe = this.recipeArray!![position].recipeImage

    var cv = convertView
    var test = LayoutInflater.from(mContext)
    cv = test.inflate(R.layout.image_cell, parent, false)

    Glide.with(this.mContext).load(recipe).into(cv!!.glide_img_cell_id as ImageView)

    return cv
}

... что похоже. Но это тоже не работает. Не знаю, почему это не работает ...

Ответы [ 3 ]

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

Я надеюсь, это поможет вам.

Glide.with(this).load(recipe).into(row!!.glide_img_cell_id)
0 голосов
/ 01 июля 2018

ОК, теперь решил: использовал Picasso. Сделал то же самое. : /

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

используйте этот код в вашем адаптере.

Glide.with(context)
                .load(url)
                .fitCenter()
                .centerCrop()
                .into(imageview);
...