RecyclerView不显示元素

时间:2019-05-12 21:08:23

标签: android kotlin android-recyclerview

我最近在android studio上启动了一个新项目。我改用Kotlin,这种语言让我很难受!

我已经在我的应用中设置了RecyclerView,并且运行良好。我的适配器将ArrayList作为参数并显示所有数据。

我在这里有两个函数,分别为我的adapter: cardMaker()getEventsInfo()创建ArrayList。这两个函数返回带有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

1 个答案:

答案 0 :(得分:0)

好吧,这与Kotlin特异性无关。

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

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

它现在运行良好。

谢谢!