在 firebase 中第二次插入 arraylist 它是附加的,不是在 firebase 中而是在我的 recyclerview 中

inserting arraylist second time in firebase it is appending, not in the firebase but in my recyclerview

当我在 firebase 中更新我的列表时,它正在正确更新,但它在回收站视图中的前一个列表下方添加了相同的列表。我该如何解决这个问题。我也想在回收站视图中更新列表。

class MainActivity : AppCompatActivity() {

    private lateinit var adapter: ExamAdapter
    private lateinit var firebaseDatabase: FirebaseDatabase
    private lateinit var databaseRef: DatabaseReference
    private lateinit var arrayList: ArrayList<String>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        firebaseDatabase = FirebaseDatabase.getInstance()
        databaseRef = firebaseDatabase.getReference("Answers")

        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.setHasFixedSize(true)

        arrayList = ArrayList<String>()
        for (i in 0 until 90) {
            arrayList.add("")
        }

        adapter = ExamAdapter(this, arrayList)
        recyclerView.adapter = adapter

        databaseRef.addValueEventListener(object : ValueEventListener {
            override fun onCancelled(error: DatabaseError) {
                Log.w("ERROR", "Failed to read value.", error.toException())
            }

            override fun onDataChange(dataSnapshot: DataSnapshot) {
                dataSnapshot.children.forEach {
                    arrayList.add(it.key!!.toInt(), it.value.toString())
                    adapter.notifyDataSetChanged()
                }
            }
        })
        fab_send.setOnClickListener {
            databaseRef.setValue(arrayList)
        }
    }
}

每次数据库中 databaseRef 下的数据更新时,您的 onDataChange 都会调用该位置下的所有数据。因此,您需要用快照中的新内容替换 arrayList 的全部内容:

override fun onDataChange(dataSnapshot: DataSnapshot) {
    arrayList.clear();
    dataSnapshot.children.forEach {
        arrayList.add(it.key!!.toInt(), it.value.toString())
        adapter.notifyDataSetChanged()
    }
}