我最近在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
答案 0 :(得分:0)
好吧,这与Kotlin特异性无关。
正如EpicPandaForce所说:“ Firebase异步获取内容”
因此,我制作了一个变量卡的类实例:ArrayList,并在OnSuccessListener的getEventsInfo()方法中添加了adapter.notifyDataSetChanged()。
它现在运行良好。
谢谢!