【发布时间】:2021-11-25 01:34:45
【问题描述】:
我正在尝试填充一个可变列表,以便可以将其用于回收站视图。不幸的是,虽然(我认为)我正在填充列表,但它仍然是空的,并且回收器视图不起作用(我想这是因为列表问题)。代码见下:
private val newList: MutableList<NewListModel> = mutableListOf()
private val oldList = retrieveOldList()
private fun retrieveAndPopulate() {
for (i in 0 until oldList.size){
val oldItem = oldList[i]
val itemOne = oldItem.itemOne
val itemTwo = oldItem.itemTwo
val itemThree = oldItem.itemThree
val itemFour = oldItem.itemFour
val newItemData =
NewListModel(
itemOne, itemTwo, itemThree, itemFour
)
newList.add(newItemData)
Log.d(
"RetrieveData",
"${newItemData.itemOne} has been added to the list."
)
}
}
下面的类是针对“NewListModel”的
@Keep
@IgnoreExtraProperties
data class NewListModel (
var itemOne: String ?= null,
var itemTwo: String ?= null,
var itemThree: String ?= null,
var itemFour: String ?= null,
)
下面是我如何尝试填充“oldList”
fun retrieveData(): MutableList<OldListModel> {
val list: MutableList<OldListModel> = mutableListOf()
val ref = FirebaseDatabase.getInstance().getReference("/storage")
ref.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()) {
ref.get()
.addOnSuccessListener {
for (listItem in snapshot.children) {
val listItem = snapshot.getValue(OldListModel::class.java)
if (listItem != null) {
list.add(listItem)
}
}
}
} else {
Log.d(
"Data",
"Retrieving data was unsuccessful."
)
}
}
override fun onCancelled(error: DatabaseError) {
}
})
return list
}
值得一提的是,我从一个可变列表中获取数据并将其添加到另一个列表中。非常感谢任何帮助
(以下是我如何尝试填充回收站视图)
val newList = retrieveAndPopulate()
val recyclerView = findViewById<View>(R.id.recyclerView) as RecyclerView
val layoutManager = LinearLayoutManager(this)
recyclerView.layoutManager = layoutManager
val adapterAdapter = AdapterAdapter(newList)
recyclerView.adapter = adapterAdapter
【问题讨论】:
-
您在一个无效的函数中声明了两个
private字段 - 您的代码甚至不应该编译。您确定旧列表中有项目吗? newList 会发生什么?你真的把它喂给适配器了吗?请展示一个完整的工作示例。 -
@dominicoder 那是我的错,我把它粘贴到了错误的地方。是的,我确定 oldList 已填充,因为当我使用“Log.d”打印它的内容时,我实际上得到了一个包含内容的可变列表。 newList 甚至什么都不做。该消息甚至没有被打印出来。 RE 回收站视图,我将其提供给适配器
-
@dominicoder 如果有帮助,我已经添加了我用来填充回收站视图的代码的 sn-p。
-
val newList = retrieveAndPopulate()无效,因为您永远不会从retrieveAndPopulate()返回任何内容。如果消息没有被打印,那么你的旧列表是空的。调试您的应用以确定故障点:developer.android.com/studio/debug -
@dominicoder 你是对的,我试图调试代码并意识到 oldList 实际上并没有被填充(我以为是,但我意识到我只是在打印快照,这给了它工作的印象)。我添加了填充 oldList 的代码 sn-p。你知道什么可能导致这个问题吗? - 非常感谢到目前为止的帮助!
标签: android kotlin mutablelist