【发布时间】:2021-02-22 13:39:55
【问题描述】:
我有一个嵌套的回收器视图,它从 firebase 获取数据。有一个 for 循环试图将同一练习的所有集合放入一张卡片中。该循环似乎工作正常,但是,回收器视图显示了 for 循环的整个过程。例如,如果要在一张卡片上添加三个项目,则显示三张卡片,第三张卡片是实际想要的结果,前两张不是想要的(所以第一张卡片有 1,第二张卡片有 2,第三张卡片会有实际的3)。我尝试添加一个 clear 函数,它产生了我想要的结果,但是只有一次,如果我尝试添加一个新的练习,它就会被替换。
private fun initRecycler() {
val date = Calendar.getInstance().time
val currentTime = SimpleDateFormat("dd-MM-yyyy", Locale.US).format(date)
recyclerView = findViewById<SuperRecyclerView>(R.id.rv_sync)
val layoutManager = LinearLayoutManager(applicationContext)
recyclerView!!.setLayoutManager(layoutManager)
adapter = ParentAdapter(
ArrayList()//mutableListOf<ParentModel>()
)
recyclerView.adapter = adapter
val syncedWorkOutReference = FirebaseDatabase.getInstance().reference
.child("Synced Workouts").child(userIds).child(currentTime)
//TODO this is the code that needs fixing*********************
syncedWorkOutReference.addValueEventListener(object : ValueEventListener {
override fun onDataChange(p0: DataSnapshot) {
val addedIds = mutableListOf<String>()
val parents = mutableListOf<ParentModel>()
for (word in p0.children) {
// (parents as ArrayList<ParentModel>).clear() ---- this produces the desired result, but shows only one card which is replaced if i try adding another.
val sets = word.getValue(FbTrackData::class.java)
val children = mutableListOf<ChildModel>()
for (word1 in p0.children) {
val sets1 = word1.getValue(FbTrackData::class.java)
if (sets1!!.exercise == sets!!.exercise && !addedIds.contains(
sets.setId
)
) {
addedIds.add(sets1.setId)
val child = ChildModel(sets1.weight, sets1.reps)
children.add(child)
}
}
val parent = ParentModel(
sets!!.exercise,
children
)
if (parent.children.isNotEmpty()) {
parents.add(parent)
}
}
adapter.setParents(parents)
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
错误结果的图像: https://ibb.co/tH0GyzB
所需结果的图像:(添加了 clear 功能,但在添加新项目时被替换): https://ibb.co/5BdWGfw
在所需的结果图像中,我通过在 for 循环中添加一个 clear 函数来实现这一点,但是,如果我添加一个新的练习,它会导致卡片被替换。当清除清除时,它会在其他图像中产生不希望的结果。我应该如何处理这个循环?
【问题讨论】:
标签: for-loop kotlin firebase-realtime-database android-recyclerview duplicates