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)
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)