在 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()
}
}
当我在 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()
}
}