I am currently working on a project in Kotlin and I'm having trouble working an image into a ViewHolder through Picasso and keep getting requests to create an extension function instead when troubleshoot. This is where the problem comes in
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val user = mUser[position]
holder.userNameTextView.text = user.getUsername()
holder.userFullNameTextView.text = user.getFullName()
Picasso.get().load(user.getImage())
.placeholder(R.drawable.ic_user_avatar_light)
.into(holder.userProfileImageView)
... with the rest of my adapter being this
class SearchAdapter(private var mContext: Context,
private var mUser: List<User>,
private var isFragment: Boolean = false) : RecyclerView.Adapter<SearchAdapter.ViewHolder>() {
private var firebaseUser: FirebaseUser? = FirebaseAuth.getInstance().currentUser
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(mContext).inflate(R.layout.user_item_layout, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val user = mUser[position]
holder.userNameTextView.text = user.getUsername()
holder.userFullNameTextView.text = user.getFullName()
Picasso.get().load(user.getImage())
.placeholder(R.drawable.ic_user_avatar_light)
.into(holder.userProfileImageView)
user.getUid()?.let { checkWatchingStatus(it, holder.userWatchButton as Button) }
holder.itemView.setOnClickListener{
val pref = mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit()
pref.putString("profileID", user.getUid())
pref.apply()
(mContext as FragmentActivity).supportFragmentManager.beginTransaction()
.replace(R.id.viewPager, ProfileFragment()).commit()
}
holder.userWatchButton.setOnClickListener{
if(holder.userWatchButton.text.toString() == "Watch"){
firebaseUser?.uid.let{ itl ->
user.getUid()?.let { it1 ->
FirebaseDatabase.getInstance().reference
.child("Watch").child(itl.toString())
.child("Watching").child(it1)
.setValue(true).addOnCompleteListener{ task ->
if (task.isSuccessful){
firebaseUser?.uid.let{ itl ->
FirebaseDatabase.getInstance().reference
.child("Watch").child(user.getUid()!!)
.child("Watchers").child(itl.toString())
.setValue(true).addOnCompleteListener{ task ->
if (task.isSuccessful){
}
}
}
}
}
}
}
} else {
firebaseUser?.uid.let{ itl ->
user.getUid()?.let { it1 ->
FirebaseDatabase.getInstance().reference
.child("Watch").child(itl.toString())
.child("Watching").child(it1)
.removeValue().addOnCompleteListener{ task ->
if (task.isSuccessful){
firebaseUser?.uid.let{ itl ->
FirebaseDatabase.getInstance().reference
.child("Watch").child(user.getUid()!!)
.child("Watchers").child(itl.toString())
.removeValue().addOnCompleteListener{ task ->
if (task.isSuccessful){
}
}
}
}
}
}
}
}
}
}
override fun getItemCount(): Int {
return mUser.size
}
class ViewHolder(@NonNull itemView: View) :RecyclerView.ViewHolder(itemView) {
var userNameTextView: TextView = itemView.findViewById(R.id.userName_search)
var userFullNameTextView: TextView = itemView.findViewById(R.id.userFullName_search)
var userProfileImageView: TextView = itemView.findViewById(R.id.userImage_search)
var userWatchButton: TextView = itemView.findViewById(R.id.watchButton_search)
}
private fun checkWatchingStatus(uid: String, userWatchButton: Button){
val watchingRef = firebaseUser?.uid.let{ itl ->
FirebaseDatabase.getInstance().reference
.child("Watch").child(itl.toString())
.child("Watching")
}
watchingRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(p0: DataSnapshot) {
if (p0.child(uid).exists()) {
userWatchButton.text = "Watching"
} else {
userWatchButton.text = "Watch"
}
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
}
Can anyone help?
In your ViewHolder
, you're declaring userProfileImageView
as a TextView
not as an ImageView
, and passing that into Picasso's
into()
method, which accepts an ImageView
as a parameter, that is why it is asking to create an extension function.
class ViewHolder(@NonNull itemView: View) :RecyclerView.ViewHolder(itemView) {
var userNameTextView: TextView = itemView.findViewById(R.id.userName_search)
var userFullNameTextView: TextView = itemView.findViewById(R.id.userFullName_search)
//declare userProfileImageView as an ImageView
var userProfileImageView: ImageView = itemView.findViewById(R.id.userImage_search)
var userWatchButton: TextView = itemView.findViewById(R.id.watchButton_search)
}