Android 只能显示从firebase到my recycler视图的最后一个子孩子(已更新)

Android 只能显示从firebase到my recycler视图的最后一个子孩子(已更新),android,firebase,kotlin,firebase-realtime-database,android-recyclerview,Android,Firebase,Kotlin,Firebase Realtime Database,Android Recyclerview,我只能将myCars中的最后一个孩子显示到recyclerView中,但我不确定我是如何尝试使用for循环的,但我不确定这样写是否正确 这是我的代码,用于GpsFragment.kt我试图在这里显示我的数据,但得到了一个错误 lateinit属性车尚未初始化 这是我的CarAdapter.kt data class Cars(val name: String = "-", val latitude: String = "-", val longt

我只能将
myCars
中的最后一个孩子显示到recyclerView中,但我不确定我是如何尝试使用for循环的,但我不确定这样写是否正确

这是我的代码,用于
GpsFragment.kt
我试图在这里显示我的数据,但得到了一个错误

lateinit属性车尚未初始化

这是我的
CarAdapter.kt

data class Cars(val name: String = "-",
            val latitude: String = "-",
            val longtitude: String = "-")
class CarAdapter (private val cars : List<Cars>, var clickListener: OnCarItemClickListener) : RecyclerView.Adapter<CarAdapter.CarViewHolder>(){

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CarViewHolder {
    val inflater = LayoutInflater.from(parent.context).inflate(R.layout.list_layout, parent, false)

    return  CarViewHolder(inflater)
}

override fun getItemCount() = cars.size

override fun onBindViewHolder(holder: CarViewHolder, position: Int) {
    val car = cars[position]

    holder.initialize(cars.get(position),clickListener)

}

class CarViewHolder(val view:View) : RecyclerView.ViewHolder(view){

    var carName = view.carname
    var lat = view.latitude
    var lng = view.longtitude

    fun initialize(cars: Cars, action:OnCarItemClickListener){
        carName.text = cars.name
        lat.text = cars.latitude
        lng.text = cars.longtitude

        view.setOnClickListener{
            action.onItemClick(cars, adapterPosition)
        }

    }
}
class-CarAdapter(private-val-cars:List,var-clickListener:oncaritemcclicklistener):RecyclerView.Adapter(){
重写CreateViewHolder(父级:ViewGroup,viewType:Int):CarViewHolder{
val inflater=LayoutInflater.from(parent.context).充气(R.layout.list_布局,parent,false)
倒车影像支架(充气机)
}
覆盖趣味getItemCount()=cars.size
覆盖BindViewHolder(支架:CarViewHolder,位置:Int){
val车辆=车辆[位置]
holder.initialize(cars.get(位置),单击Listener)
}
类别CarViewHolder(val视图:视图):RecyclerView.ViewHolder(视图){
var carName=view.carName
var lat=视图纬度
var lng=视图长度
趣味初始化(汽车:汽车,动作:OnCarItemClickListener){
carName.text=cars.name
lat.text=cars.latitude
lng.text=cars.longtude
view.setOnClickListener{
动作.onItemClick(汽车、适配器位置)
}
}
}
}

ClickListener上的接口{ 趣味mclick(汽车:汽车,位置:Int)
}

Firebase api是异步的,因此当您调用
myCarlist?时。adapter=CarAdapter(cars,this)
是否在从数据库检索数据之前被调用,并且由于您正在for循环内初始化
cars
,因此您会得到上面的错误,即它尚未初始化。因此,要解决这个问题,您需要在
onDataChange()中设置适配器:


它说“类型不匹配,需要OnCarItemClickListener找到类”Try
this@GpsFragment
tks它解决了初始化错误,但我仍然无法显示来自Firebase的数据,而是出现了此错误'E/RecyclerView:未连接适配器;跳过布局'
class CarAdapter (private val cars : List<Cars>, var clickListener: OnCarItemClickListener) : RecyclerView.Adapter<CarAdapter.CarViewHolder>(){

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CarViewHolder {
    val inflater = LayoutInflater.from(parent.context).inflate(R.layout.list_layout, parent, false)

    return  CarViewHolder(inflater)
}

override fun getItemCount() = cars.size

override fun onBindViewHolder(holder: CarViewHolder, position: Int) {
    val car = cars[position]

    holder.initialize(cars.get(position),clickListener)

}

class CarViewHolder(val view:View) : RecyclerView.ViewHolder(view){

    var carName = view.carname
    var lat = view.latitude
    var lng = view.longtitude

    fun initialize(cars: Cars, action:OnCarItemClickListener){
        carName.text = cars.name
        lat.text = cars.latitude
        lng.text = cars.longtitude

        view.setOnClickListener{
            action.onItemClick(cars, adapterPosition)
        }

    }
}
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if (dataSnapshot.exists())
            {
                for (childDss in dataSnapshot.children){
                    val count = childDss.child("myCar").childrenCount.toInt()
                    Log.d("count",count.toString())

                    for (i in 0 until count){
                        val carLat  = childDss.child("carlat").getValue(String::class.java)
                        val carLng  = childDss.child("carlng").getValue(String::class.java)
                        val name  = childDss.child("carid").getValue(String::class.java)

                        cars = listOf(
                            Cars(name.toString(),carLat.toString(),carLng.toString())
                        )

                    }
                      myCarlist?.adapter = CarAdapter(cars,this)
                }
            }
        }