Пикассо выбрасывает «неразрешенную ссылку» для моего imageView, но это было объявлено в ViewHolder - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь использовать Picasso для загрузки моего RecyclerView с изображениями JSON, но проблема в том, что Picasso не распознает мой imageView, несмотря на то, что он был объявлен в ViewHolder.

import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.list_item.view.*

class PosterAdapter(val movieData: Movies) : RecyclerView.Adapter<PosterHolder>(){
    val movieList = mutableListOf<Movies>()

    override fun getItemCount(): Int { return movieList.size }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PosterHolder{

        val layoutInflater = LayoutInflater.from(parent?.context)
        val listItem = layoutInflater.inflate(R.layout.list_item, parent, false)
        return PosterHolder(listItem)
    }

    override fun onBindViewHolder(holder: PosterHolder, position: Int) {
        Picasso
                .get()
                .load("" + R.string.base_URL + "" + movieData.moviePoster)
                .into(PosterHolder.imageView)//identifier imageView is red

        holder.view.movie_poster?.scaleType = ImageView.ScaleType.FIT_CENTER
    }
}

class PosterHolder(val view: View) : RecyclerView.ViewHolder(view), View.OnClickListener {
    var imageView: ImageView? = null

    fun PosterHolder(view: View){ this.imageView = view.findViewById<View>(R.id.movie_poster) as ImageView }

    override fun onClick(p0: View?) {}
}

1 Ответ

0 голосов
/ 07 мая 2018

В вашем коде есть две проблемы. Первая проблема - вы передаете идентификатор ресурса в URL как R.string.base_URL. Вы должны прочитать ресурс и передать его значение, а не идентификатор. Объявите базовый URL-адрес как глобальный.

private var BASE_URL: String?=null

Получить контекст в адаптере.

BASE_URL=context.resources.getString(R.string.base_URL)

Или вы можете передать BASE_URL в конструктор.

Вторая проблема заключается в том, что вы должны использовать holder.imageView вместо PosterHolder.imageView

Picasso
            .get()
            .load(BASE_URL + movieData.moviePoster)
            .into(holder.imageView)
...