Android 类型不匹配。必需:在片段中找到上下文

Android 类型不匹配。必需:在片段中找到上下文,android,kotlin,Android,Kotlin,在我的SearchFragment.kt中,我有: private lateinit var userDb: FirebaseFirestore private lateinit var users: MutableList<User> private lateinit var adapter: UsersAdapters fun getUsers() { users = mutableListOf() adapter = UsersAdapters(this, u

在我的
SearchFragment.kt
中,我有:

private lateinit var userDb: FirebaseFirestore
private lateinit var users: MutableList<User>
private lateinit var adapter: UsersAdapters

fun getUsers() {
    users = mutableListOf()
    adapter = UsersAdapters(this, users)

    userDb = FirebaseFirestore.getInstance()
    val userReference = userDb.collection("users")
    userReference.addSnapshotListener { snapshot, exception ->
        if (exception != null || snapshot == null) {
            Log.i("TAG", "Somethings Wrong", exception)
            return@addSnapshotListener
        }
        val userList = snapshot.toObjects(User::class.java)
        for (user in userList) {
            Log.i("TAG", "Document ${user.username}")
        }
    }
}
我的
UserAdapter.kt
看起来像:

package com.example.myapp

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.item_user.view.*

import com.example.myapp.models.User


class UsersAdapters (val context: Context, val users: List<User>) :
    RecyclerView.Adapter<UsersAdapters.ViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(context).inflate(R.layout.item_user, parent, false)
    return ViewHolder(view)
}

override fun getItemCount() = users.size

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.bind(users[position])
}

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    fun bind(user: User) {
        itemView.etUsername.text = user?.username
        Glide.with(context).load(user.profileURL).into(itemView.profileImage)
    }
}
}
我收到以下错误:

Type mismatch.
Required:
Context
Found:
SearchFragment
试试这个:

adapter = UsersAdapters(requireActivity(), users)
  • 不要将上下文传递给适配器。移除它,你不需要它

  • 膨胀视图时,请使用
    parent.context
    而不是外部上下文。您还可以内联该返回语句,如

    返回LayoutInflater.from(parent.context).充气(R.layout.item\u用户,父项,false)

  • 您正在ViewHolder类中使用Glide

  • 替换

    Glide.with(context).load(user.profileURL).into(itemView.profileImage)
    


    Glide将把视图作为一个参数。这是有效的,也是编写代码的正确方法。

    @GurmukhSingh:如果这解决了您的问题,请确保在您能够解决问题后将其标记为已接受的答案。(当然,假设它是所提供的解决方案中最有用的一种。)这不仅仅是一个可行的解决方案。我投了反对票。即使有效,这也不是正确的解决方案。详见我的答案。
    adapter = UsersAdapters(requireActivity(), users)
    
    Glide.with(context).load(user.profileURL).into(itemView.profileImage)
    
    Glide.with(itemView).load(user.profileURL).into(itemView.profileImage)