未解决的参考:recyclerView 适配器中的 findViewById
Unresolved reference: findViewById in recyclerView adapter
我必须使用要加载图像的 imageView。因此,要使用我正在使用 findViewId 的 imageView,但它给出了一个错误:未解析的引用:findViewById。
imageView 的 id 是 ivArticleImage
NewsAdapter.kt:
package com.example.newsapp_mvvm.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.newsapp_mvvm.R
import com.example.newsapp_mvvm.models.Article
class NewsAdapter: RecyclerView.Adapter<NewsAdapter.ArticleViewHolder>() {
val articleImage= findViewById<ImageView>(R.id.ivArticleImage)
inner class ArticleViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
private val differCallback= object:DiffUtil.ItemCallback<Article>(){
override fun areItemsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem.url==newItem.url
}
override fun areContentsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem==newItem
}
}
val differ=AsyncListDiffer(this,differCallback)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArticleViewHolder {
return ArticleViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_article_preview,
parent,
false
)
)
}
override fun onBindViewHolder(holder: ArticleViewHolder, position: Int) {
val article = differ.currentList[position]
holder.itemView.apply {
Glide.with(this).load(article.urlToImage).into(articleImage)
}
}
override fun getItemCount(): Int {
return differ.currentList.size
}
}
如何解决这个错误?
你可以用它来解决这个错误,你已经在 holder 的外面定义了你的视图。您可以将其定义到 onbindholder 方法中,您可以将该图像视图用于您的适配器。
package com.example.newsapp_mvvm.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.newsapp_mvvm.R
import com.example.newsapp_mvvm.models.Article
class NewsAdapter: RecyclerView.Adapter<NewsAdapter.ArticleViewHolder>() {
lateinit var articleImage:ImageView
inner class ArticleViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
private val differCallback= object:DiffUtil.ItemCallback<Article>(){
override fun areItemsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem.url==newItem.url
}
override fun areContentsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem==newItem
}
}
val differ=AsyncListDiffer(this,differCallback)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArticleViewHolder {
return ArticleViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_article_preview,
parent,
false
)
)
}
override fun onBindViewHolder(holder: ArticleViewHolder, position: Int) {
val article = differ.currentList[position]
articleImage= holder.itemView.findViewById<ImageView>(R.id.ivArticleImage)
holder.itemView.apply {
Glide.with(this).load(article.urlToImage).into(articleImage)
}
}
override fun getItemCount(): Int {
return differ.currentList.size
}
}
我必须使用要加载图像的 imageView。因此,要使用我正在使用 findViewId 的 imageView,但它给出了一个错误:未解析的引用:findViewById。 imageView 的 id 是 ivArticleImage
NewsAdapter.kt:
package com.example.newsapp_mvvm.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.newsapp_mvvm.R
import com.example.newsapp_mvvm.models.Article
class NewsAdapter: RecyclerView.Adapter<NewsAdapter.ArticleViewHolder>() {
val articleImage= findViewById<ImageView>(R.id.ivArticleImage)
inner class ArticleViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
private val differCallback= object:DiffUtil.ItemCallback<Article>(){
override fun areItemsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem.url==newItem.url
}
override fun areContentsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem==newItem
}
}
val differ=AsyncListDiffer(this,differCallback)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArticleViewHolder {
return ArticleViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_article_preview,
parent,
false
)
)
}
override fun onBindViewHolder(holder: ArticleViewHolder, position: Int) {
val article = differ.currentList[position]
holder.itemView.apply {
Glide.with(this).load(article.urlToImage).into(articleImage)
}
}
override fun getItemCount(): Int {
return differ.currentList.size
}
}
如何解决这个错误?
你可以用它来解决这个错误,你已经在 holder 的外面定义了你的视图。您可以将其定义到 onbindholder 方法中,您可以将该图像视图用于您的适配器。
package com.example.newsapp_mvvm.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.newsapp_mvvm.R
import com.example.newsapp_mvvm.models.Article
class NewsAdapter: RecyclerView.Adapter<NewsAdapter.ArticleViewHolder>() {
lateinit var articleImage:ImageView
inner class ArticleViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
private val differCallback= object:DiffUtil.ItemCallback<Article>(){
override fun areItemsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem.url==newItem.url
}
override fun areContentsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem==newItem
}
}
val differ=AsyncListDiffer(this,differCallback)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArticleViewHolder {
return ArticleViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_article_preview,
parent,
false
)
)
}
override fun onBindViewHolder(holder: ArticleViewHolder, position: Int) {
val article = differ.currentList[position]
articleImage= holder.itemView.findViewById<ImageView>(R.id.ivArticleImage)
holder.itemView.apply {
Glide.with(this).load(article.urlToImage).into(articleImage)
}
}
override fun getItemCount(): Int {
return differ.currentList.size
}
}