Android RecyclerView上未解析的引用
我能够从Firebase检索数据,但当我尝试将其加载到groupie适配器时,recyclerview活动未加载,并显示以下错误“未解析引用:由于接收器类型不匹配,以下候选项均不适用…”,我缺少依赖项 这是我的活动代码,在fetchUser方法的下面是我得到错误的地方:Android RecyclerView上未解析的引用,android,firebase,gradle,kotlin,android-recyclerview,Android,Firebase,Gradle,Kotlin,Android Recyclerview,我能够从Firebase检索数据,但当我尝试将其加载到groupie适配器时,recyclerview活动未加载,并显示以下错误“未解析引用:由于接收器类型不匹配,以下候选项均不适用…”,我缺少依赖项 这是我的活动代码,在fetchUser方法的下面是我得到错误的地方: import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.googl
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener
import com.xwray.groupie.GroupAdapter
import com.xwray.groupie.GroupieViewHolder
import com.xwray.groupie.Item
import kotlinx.android.synthetic.main.activity_new_message.*
class NewMessageActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_message)
// Activity screen title
supportActionBar?.title = "Select User"
val adapter = GroupAdapter<GroupieViewHolder>()
adapter.add(UserItem())
adapter.add(UserItem())
adapter.add(UserItem())
recycler_view_new_message.adapter = adapter
fetchUsers()
}
}
private fun fetchUsers() {
val ref = FirebaseDatabase.getInstance().getReference("/users")
ref.addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(p0: DataSnapshot) {
val adapter = GroupAdapter<GroupieViewHolder>()
p0.children.forEach {
Log.d("NewMessage", it.toString())
val user = it.getValue(User::class.java)
adapter.add(UserItem())
}
recycler_view_new_message.adapter = adapter /// THIS IS WHERE I GET THE UNRESOLVED REFERENCE ERROR
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
class UserItem: Item<GroupieViewHolder>() {
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
}
override fun getLayout(): Int {
return R.layout.user_row_new_message
}
}
这是我的recyclerView XML配置:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".NewMessageActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_new_message"
android:layout_width="0dp"
android:layout_height="0dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
解决方案:
这是一个非常愚蠢的错误,我意识到我将fetchUsers()方法留在了NewMessageActivity类之外,所以我将该方法移回了类中,并且我能够引用RecyclerView组件。在设置适配器之前,使用下面的代码定义对
RecyclerView
的引用。i、 e
onCreate
函数位于类中它的正上方。定义您的RecyclerView
,如下所示
lateinit var recycler\u view\u new\u消息:RecyclerView
onCreate
函数中,在recycler\u view\u new\u message.adapter=adapter之前添加以下代码
recycler\u view\u new\u message=findViewById(R.id.recycler\u view\u new\u message)
在设置适配器之前,使用下面的代码定义对
RecyclerView
的引用。i、 e
onCreate
函数位于类中它的正上方。定义您的RecyclerView
,如下所示
lateinit var recycler\u view\u new\u消息:RecyclerView
onCreate
函数中,在recycler\u view\u new\u message.adapter=adapter之前添加以下代码
recycler\u view\u new\u message=findViewById(R.id.recycler\u view\u new\u message)
发布您的
GroupAdapter
code发布您的错误日志请不要编辑您的问题使用“回答您自己的问题”发布您的GroupAdapter
code发布您的错误日志请不要编辑您的问题使用“回答您自己的问题”您应该阅读关于Kotlin合成属性的内容,你的回答对那个问这个问题的人毫无帮助。@DamianKozlak我的错。我是从Java的角度回答的。你应该读一下Kotlin合成属性,你的回答对提出这个问题的人毫无帮助。@DamianKozlak我的错。我从Java的角度回答。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".NewMessageActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_new_message"
android:layout_width="0dp"
android:layout_height="0dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>