リサイクラーアダプターで画像のURLを取得するためにネットワークコールを行います。 URLを受け取った後、ユニバーサル画像ローダを使用して画像を画像ビューに読み込みます。問題は、スクロールしていないときに画像が適切な場所にロードされたときですが、スクロールするとすぐに間違った場所で画像が膨張します。 は、ここに私のアダプタです:リサイクラービューの正しい位置に画像を読み込む
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is ViewHolder) {
val article = feeds[position]
holder.articleTitle.setFont("SourceSansPro-SemiBold.ttf")
holder.articleDescription.setFont("OpenSans-Regular.ttf")
holder.articleTime.setFont("OpenSans-Light.ttf")
mAnimator?.onBindViewHolder(holder.itemView, position)
holder.apply {
article.apply {
articleTitle.text = title
articleDescription.text = Html.fromHtml(description)
articleTime.text = TimeUtils.convertLongToTime(pubDate)
if (image.isBlank()){
//load picture url when it's empty
mContext?.doAsync {
ImageExtractor.extractImageUrl(link, object : OnImageExtractorListener {
override fun onSuccess(url: String) {
v("imaaaage success $title $url")
mContext?.runOnUiThread {
article.image = url
//use uil to load the image didn't work so I tried just updating the model
//articleImage.displayImage(url)
feeds[position] = article
notifyItemChanged(position)
}
val dbo = context.getDatabase()
dbo.updateArticleImage(dbo,url,article.id)
}
override fun onError() {
}
})
}
}else{
articleImage.displayImage(image)
isRead?.let {
if (isRead!! && !isSaved){
grayScale(holder)
}
}
}
container.setOnClickListener {
itemClick(this)
if (!isSaved){
article.isRead = true
feeds[position] = article
notifyItemChanged(position)
}
}
}
}
}else if (holder is LoadingViewHolder){
holder.progressBar.isIndeterminate = true
}
}
私は、ユーザーがスクロールされているかどうかを彼らの適切な場所にイメージをロードする方法が必要です。
グライド、フレスコ画などの画像ローダーライブラリを使用してください。また、画像ホルダー –
と重複する可能性があります。https://stackoverflow.com/questions/26525999/recyclerview-async-image-loading – Anthea
@ ArbazRizvi別のライブラリを試してみますが、現在は[UIL](https://github.com/nostra13/Android-Universal-Image-Loader)を使っています –