Я получаю данные Firebase, показанные по ссылке ниже. RecyclerView показывает несколько копий того, что должно быть одной строкой, и я не могу понять, почему. Ключ для каждого раздела в базе данных должен совпадать с заголовком для каждой строки в RecyclerView.
Fibebase Data Link 1
Выводприложение
с использованием этого кода
var benefitSpinner = benefitListSpinner
val spinnerSelection = arrayOf("National", "Texas", "Iowa", "Alabama")
benefitSpinner.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, spinnerSelection)
benefitSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onNothingSelected(parent: AdapterView<*>?) {
location = "National"
}
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
location = spinnerSelection.get(position)
fetchNationalBenefits()
}
}
}
val benefitMap = LinkedHashMap<String, Benefit>()
private fun refreshRecyclerViewMessages(){
benefitMap.values.forEach{
adapter.add(BenefitItem(it))
}
}
private fun fetchNationalBenefits() {
benefitMap.clear()
adapter.clear()
val ref = FirebaseDatabase.getInstance().getReference("/$location")
ref.addChildEventListener(object: ChildEventListener{
override fun onChildAdded(p0: DataSnapshot, p1: String?) {
p0.children.forEach{
val benefitItem = p0.getValue(Benefit::class.java) ?: return
benefitMap[p0.key!!] = benefitItem
}
refreshRecyclerViewMessages()
}
override fun onChildChanged(p0: DataSnapshot, p1: String?) {
}
override fun onChildMoved(p0: DataSnapshot, p1: String?) {
}
override fun onChildRemoved(p0: DataSnapshot) {
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
}