RecyclerView не показывает элементы - PullRequest
0 голосов
/ 13 мая 2019

Я недавно начал новый проект на андроид студии. Я перешел на Kotlin, и этот язык доставляет мне такие трудности!

Я установил RecyclerView в своем приложении, и оно работает нормально. Мой адаптер принимает ArrayList в качестве аргумента и отображает все данные.

У меня есть две функции, которые создают ArrayList для моих adapter: cardMaker() и getEventsInfo(). Эти две функции возвращают ArrayList с элементами Cards.

Когда я вызываю мой адаптер с ArrayList, созданным getEventsInfo, тогда все события отображаются нормально.

Но когда я использую cardMaker(), события не отображаются!

Я действительно не могу понять, что здесь происходит, и это сводит меня с ума! ^^

Если этот язык действительно последовательный по умолчанию, как такое поведение возможно? Я упал, словно упустил что-то важное здесь.

private fun cardMaker(): ArrayList<Card?> {
    var newCards: ArrayList<Card?> = arrayListOf()
    newCards.add(Card("UserCard", R.mipmap.logo_zenith_round, userData.firstName, userData.lastName))
    val infoCards = getEventsInfo()
    newCards.addAll(infoCards)

    return newCards
}

private fun getEventsInfo(): ArrayList<Card?> {
    var infoCards: ArrayList<Card?> = arrayListOf()
    db.collection("Events")
        .get()
        .addOnSuccessListener { result ->
            for (document in result) {
                val eventsInfo = Card("EventCard",
                    R.mipmap.logo_zenith_round,
                    "${document.get("Name")}",
                    "${document.get("Date")}")
                infoCards.add(eventsInfo)
            }
        }
        .addOnFailureListener { exception ->
            Log.w(TAG, "Error getting documents.", exception)
        }
    return infoCards
}

cards = cardMaker()

// RecyclerView
linearLayoutManager = 
androidx.recyclerview.widget.LinearLayoutManager(this)
recyclerView = findViewById(R.id.recycler_view)
recyclerView.layoutManager = linearLayoutManager
adapter = RecyclerAdapter(cards)
recyclerView.adapter = adapter

1 Ответ

0 голосов
/ 13 мая 2019

Ну, это не было связано со спецификой Kotlin.

Как EpicPandaForce сказал: «Firebase извлекает вещи асинхронно»

Поэтому я сделал экземпляр класса переменных карт: ArrayList и добавил адаптер.notifyDataSetChanged () в моем методе getEventsInfo () внутри OnSuccessListener.

Теперь он работает отлично.

Спасибо!

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