毕加索为我的 imageView 抛出 "unresolved reference" 但它已在 ViewHolder 中声明

Picasso throws "unresolved reference" for my imageView but it has been declared in the ViewHolder

我正在尝试使用 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?) {}
}

你的代码有两个问题。第一个问题是您将 url 中的资源 ID 作为 R.string.base_URL 传递。您应该阅读资源并传递它的值而不是 id 。 将基础 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)