【问题标题】:how to stop recycler view from repeating for loop items before actual result?如何在实际结果之前阻止回收器视图重复循环项目?
【发布时间】: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


    【解决方案1】:

    我通过更改将数据发送到适配器的方式解决了我的问题。我没有发送包含标题和子模型(包含权重和代表)的父模型,而是简单地将标题的数组列表发送到适配器,然后在父适配器中,我查询 firebase 以获取第二组与标题匹配的数据并将其从那里发送到子适配器。

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多