Как добавить несколько данных в переработчик с данными из Firebase, используя ArrayList <CustomClass> - PullRequest
0 голосов
/ 17 декабря 2018

РЕДАКТИРОВАТЬ: РЕШЕНО ( RecyclerView показывает только один элемент из Firebase )

В настоящее время мой код может извлекать данные из Firebase и помещать их в мой ArrayList,Но проблема в том, что он может поместить только одни данные в ArrayList и передать их адаптеру представления переработчика.

Мой код для получения из firebase и заполнения данных в ArrayList

    private fun getFromFirebase() {
        val currentUserUID = FirebaseAuth.getInstance().uid.toString()
        val ref = FirebaseDatabase.getInstance().reference
        ref.child("users").child(currentUserUID).child("foods").addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onCancelled(p0: DatabaseError) {

            }

            override fun onDataChange(p0: DataSnapshot) {
                setHasFixedSize(true)
                recyclerview.layoutManager = LinearLayoutManager(this@FoodListActivity)
                p0.children.forEach {
                    Log.d("getFood", it.toString())
                    val foodData = it.getValue(Foods::class.java)
                    if (foodData != null) {
                        val foodList = ArrayList<Foods>()
                        val adapter = ListAdapter(foodList)
                        foodList.add(foodData)
                        recyclerview.adapter = adapter

                    }
                }

            }

        })}}

А вот и мой адаптер

class listAdapter(val food : ArrayList<Foods>) : RecyclerView.Adapter<listAdapter.ViewHolder>() {

    override fun getItemCount(): Int {
        return food.count()
        Log.d("getFood", food.size.toString())
    }

}

Проблема здесь в том, что когда я делаю Log.d ("getFood", it.toString ()), я могу получить всеэлемент из базы данных, но когда я делаю Log.d ("getFood", food.size.toString ()), я получаю только 1, а в моем recyclerView также будет отображаться только один элемент, который каждый раз оказывается вторымодин на структуру данных, «мягкий пряный» один.

Вот моя структура данных Firebase

1 Ответ

0 голосов
/ 17 декабря 2018

Измените addListenerForSingleValueEvent на ValueEventListener, также вы должны позвонить adapter.notifydatasetchanged после этой линии recyclerview.adapter = adapter

private fun getFromFirebase() {
    val currentUserUID = FirebaseAuth.getInstance().uid.toString()
    val ref = FirebaseDatabase.getInstance().reference
    ref.child("users").child(currentUserUID).child("foods").addValueEventListener(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {

        }

        override fun onDataChange(p0: DataSnapshot) {
            setHasFixedSize(true)
            recyclerview.layoutManager = LinearLayoutManager(this@FoodListActivity)
            p0.children.forEach {
                Log.d("getFood", it.toString())
                val foodData = it.getValue(Foods::class.java)
                if (foodData != null) {
                    val foodList = ArrayList<Foods>()
                    val adapter = ListAdapter(foodList)
                    foodList.add(foodData)
                    recyclerview.adapter = adapter
                    recyclerview.adapter.notifydatasetchanged
                }
            }

        }

    })}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...