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