Picasso为我的imageView抛出了“未解析的引用”,但它已在ViewHolder中声明

时间:2018-05-07 17:30:18

标签: android json kotlin picasso

我正在尝试使用Picasso加载带有JSON图像的RecyclerView,但问题是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 :(得分:3)

您的代码中存在两个问题。第一个问题是您将URL中的资源ID传递为<div class="container question"> <h2>What kind of medication were you given?</h2> <div class="row col-sm-6 medRow1"> <div class="checkbox"> <label><input type="checkbox" class="medType" onclick="selectMeds(this)" value="Tylenol">Tylenol</label> </div> <div class="checkbox"> <label><input type="checkbox" class="medType" onclick="selectMeds(this)" value="Celebrex">Celebrex</label> </div> <div class="checkbox"> <label><input type="checkbox" class="medType" onclick="selectMeds(this)" value="Oxycodone">Oxycodone</label> </div> <div class="checkbox"> <label><input type="checkbox" class="medType" onclick="selectMeds(this)" value="Oxycotin">Oxycotin</label> </div> </div> <div class="row col-sm-6 medRow2"> <div class="checkbox"> <label><input type="checkbox" class="medType" onclick="selectMeds(this)" value="Dilaudid">Dilaudid</label> </div> <div class="checkbox"> <label><input type="checkbox" class="medType" onclick="selectMeds(this)" value="Tramadol">Tramadol</label> </div> <div class="checkbox"> <label><input type="checkbox" class="medType" onclick="selectMeds(this)" value="Aspirin">Aspirin</label> </div> <div class="checkbox"> <label><input type="checkbox" class="medType" onclick="selectMeds(this)" value="Warfarin/Coumadin">Warfarin/Coumadin</label> </div> </div> </div> <div id="endOfPage"></div>。您应该读取资源并传递它的值而不是id。 将Base url声明为全局。

R.string.base_URL

获取适配器中的上下文。

private var BASE_URL: String?=null

或者您可以在构造函数中传递BASE_URL=context.resources.getString(R.string.base_URL)

第二个问题是您应该使用BASE_URL而不是holder.imageView

PosterHolder.imageView