首页 > 解决方案 > RecyclerView 不显示元素

问题描述

我最近在 android studio 上开始了一个新项目。我切换到 Kotlin,这种语言让我很难受!

我已经在我的应用程序中设置了一个RecyclerView,它工作正常。我的适配器将 aArrayList作为参数并显示所有数据。

我在这里有两个函数为我的adapter: cardMaker()和创建 ArrayList getEventsInfo()。这两个函数返回一个带有 Cards 元素的 ArrayList。

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

标签: androidkotlinandroid-recyclerview

解决方案


好吧,它与 Kotlin 的特异性无关。

正如 EpicPandaForce 所说:“Firebase 异步获取内容”

因此,我创建了变量卡的类实例:ArrayList 并在 OnSuccessListener 内的 getEventsInfo() 方法中添加了 adapter.notifyDataSetChanged()。

它现在运行良好。

谢谢!


推荐阅读