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找到类”Trythis@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)
}
}
}