Я могу отобразить только последний дочерний элемент в myCars
в программе recyclerView, но я не уверен, как я пытался использовать для l oop, но я не уверен, что это правильный способ написать его
это мой код для GpsFragment.kt
Я попытался отобразить здесь свои данные и получил ошибку,
lateinit собственность автомобилей не была инициализирована
class GpsFragment : Fragment(), OnCarItemClickListener {
private var user = FirebaseAuth.getInstance().currentUser
val reqId = user!!.uid
lateinit var cars: List<Cars>
private val ref = FirebaseDatabase.getInstance().reference.child("users")
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
(context as AppCompatActivity).supportActionBar!!.title = "Gps"
val root = inflater.inflate(R.layout.fragment_gps, container, false)
return root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
addCarbtn.setOnClickListener {
val intent = Intent(activity, AddCarActivity::class.java)
activity?.startActivity(intent)
}
cars = emptyList()
var adapter = CarAdapter(cars, this)
myCarlist?.adapter = adapter
showCars()
}
private fun showCars() {
var carLat:String
var carLng:String
var name:String
val query = ref.orderByChild("uid").equalTo(reqId)
query.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (childDss in dataSnapshot.children) {
for (subChildren in childDss.child("myCars").children){
val count = childDss.child("myCars").childrenCount.toInt()
carLat = (subChildren.child("carlat").getValue(String::class.java)).toString()
carLng = (subChildren.child("carlng").getValue(String::class.java)).toString()
name = (subChildren.child("carid").getValue(String::class.java)).toString()
Log.d("carlat",carLat.toString())
Log.d("carlng",carLng.toString())
Log.d("name",name.toString())
cars = listOf(
Cars(name.toString(), carLat.toString(), carLng.toString())
)
}
}
myCarlist?.layoutManager = LinearLayoutManager(activity)
myCarlist?.adapter = CarAdapter(cars,this@GpsFragment)
myCarlist.adapter?.notifyDataSetChanged()
}
})
}
override fun onItemClick(cars: Cars, position: Int) {
val intent = Intent(context, TrackingActivity::class.java)
intent.putExtra("CARNAME", cars.name)
intent.putExtra("LAT", cars.latitude)
intent.putExtra("LNG", cars.longtitude)
startActivity(intent)
}
}
Это мой код для Cars.kt
data class Cars(val name: String = "-",
val latitude: String = "-",
val longtitude: String = "-")
Это мой код для CarAdapter.kt
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)
}
}
}
}
интерфейс OnCarItemClickListener {fun onItemClick (автомобили: автомобили, позиция: Int)}