For loop 如何阻止回收器视图在实际结果之前重复循环项目?
我有一个嵌套的回收器视图,它从firebase获取数据。有一个for循环运行,试图将同一练习的所有集合放入一张卡中。循环似乎工作正常,但是,recycler视图显示了for循环的整个过程。例如,如果有三个项目要添加到一张卡上,它会显示三张卡,其中第三张卡是所需的实际结果,前两张卡不是所需的(因此第一张卡有1张,第二张卡有2张,第三张卡有实际的3张)。我尝试添加了一个clear函数,它产生了我想要的结果,但是只有一次,如果我尝试添加一个新的练习,它就会被替换For loop 如何阻止回收器视图在实际结果之前重复循环项目?,for-loop,kotlin,firebase-realtime-database,android-recyclerview,duplicates,For Loop,Kotlin,Firebase Realtime Database,Android Recyclerview,Duplicates,我有一个嵌套的回收器视图,它从firebase获取数据。有一个for循环运行,试图将同一练习的所有集合放入一张卡中。循环似乎工作正常,但是,recycler视图显示了for循环的整个过程。例如,如果有三个项目要添加到一张卡上,它会显示三张卡,其中第三张卡是所需的实际结果,前两张卡不是所需的(因此第一张卡有1张,第二张卡有2张,第三张卡有实际的3张)。我尝试添加了一个clear函数,它产生了我想要的结果,但是只有一次,如果我尝试添加一个新的练习,它就会被替换 private fun initRe
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) {
}
})
}
private fun initRecycler(){
val date=Calendar.getInstance().time
val currentTime=SimpleDataFormat(“dd-MM-yyyy”,Locale.US)。格式(日期)
recyclerView=findViewById(R.id.rv\u同步)
val layoutManager=LinearLayoutManager(applicationContext)
回收视图!!.setLayoutManager(layoutManager)
适配器=父适配器(
ArrayList()//mutableListOf()
)
recyclerView.adapter=适配器
val syncedWorkOutReference=FirebaseDatabase.getInstance().reference
.child(“同步训练”).child(用户ID).child(当前时间)
//TODO这是需要修复的代码*********************
SyncedWorkUtReference.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(p0:DataSnapshot){
val addedIds=mutableListOf()
val parents=mutableListOf()
for(p0.children中的单词){
//(parents as ArrayList).clear()——这将生成所需的结果,但仅显示一张卡,如果我尝试添加另一张卡,该卡将被替换。
val sets=word.getValue(FbTrackData::class.java)
val children=mutableListOf()
for(p0.children中的单词1){
val sets1=word1.getValue(FbTrackData::class.java)
如果(sets1!!.exercise==sets!!.exercise&&!addedIds.contains)(
sets.setId
)
) {
addedIds.add(set1.setId)
val child=ChildModel(设置1.weight,设置1.reps)
children.add(child)
}
}
val parent=ParentModel(
集合!!练习,
儿童
)
if(parent.children.isNotEmpty()){
父对象。添加(父对象)
}
}
adapter.setParents(父级)
}
已取消覆盖乐趣(p0:DatabaseError){
}
})
}
错误结果的图像:
所需结果的图像:(添加clear函数时发生,但在添加新项时被替换):
在期望的结果图像中,我通过在for循环中添加一个clear函数实现了这一点,但是,如果我添加一个新的练习,它会导致卡被替换。当清除被删除时,它会在另一个图像中产生不希望的结果。我应该如何处理这个循环?我通过改变向适配器发送数据的方式解决了这个问题。我没有发送包含标题和子模型(包含权重和重复次数)的父模型,而是将标题的数组列表发送到适配器,然后在父适配器中,查询firebase以获取与标题匹配的第二组数据,并从那里将其发送到子适配器