Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView上未解析的引用_Android_Firebase_Gradle_Kotlin_Android Recyclerview - Fatal编程技术网

Android RecyclerView上未解析的引用

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

我能够从Firebase检索数据,但当我尝试将其加载到groupie适配器时,recyclerview活动未加载,并显示以下错误“未解析引用:由于接收器类型不匹配,以下候选项均不适用…”,我缺少依赖项

这是我的活动代码,在fetchUser方法的下面是我得到错误的地方:


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>