Android 微调器中的重复项
Repeated items in Android spinner
我有一个在 onCreate 中调用的微调器 activity。微调器从 Room 数据库中获取数据。当我第一次 运行 微调器时,数据显示正确。但是当我回到微调器时,我可以多次看到相同的项目。例如。应该只有 11、12、13、14 等值,而不是 11 或 12 两次(有时甚至更多次)。
我在 onCreate Activity 中调用函数 initSpinnerData()。我在 onResume activity 中试过,它显示相同的结果。
private fun initSpinnerData(){
val allDevices = this?.let {
ArrayAdapter<Any>(it, R.layout.simple_item_spinner, R.id.tv_simple_item)
}
zebraViewModel.getAllZebra()
.observe(this, { devices ->
devices?.forEach{
allDevices?.add(it)
}
} )
spinner3.adapter = allDevices
spinner3.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onItemSelected(parent: AdapterView<*>?, p1: View?, position: Int, p3: Long) {
if (parent != null) {
val idZebraString = parent.getItemAtPosition(position).toString()
idZebra = idZebraString.toInt()
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {
Toast.makeText(this@ZebraActivity, "You must choose some item", Toast.LENGTH_LONG).show() }
}
}
那是因为 .observe
方法,在每个项目开始时以及单个模型更改时都会调用该方法,但无论如何您都在调用 add
,导致重复
尝试检查此新项目是否已存在于适配器中,如果是则什么都不做或删除旧项目并添加新项目。例如
devices?.forEach{
if (allDevices.getPosition(it) < 0) allDevices?.add(it)
}
如果您有正确的模型声明(toString()
和哈希码),那应该可以工作
我有一个在 onCreate 中调用的微调器 activity。微调器从 Room 数据库中获取数据。当我第一次 运行 微调器时,数据显示正确。但是当我回到微调器时,我可以多次看到相同的项目。例如。应该只有 11、12、13、14 等值,而不是 11 或 12 两次(有时甚至更多次)。
我在 onCreate Activity 中调用函数 initSpinnerData()。我在 onResume activity 中试过,它显示相同的结果。
private fun initSpinnerData(){
val allDevices = this?.let {
ArrayAdapter<Any>(it, R.layout.simple_item_spinner, R.id.tv_simple_item)
}
zebraViewModel.getAllZebra()
.observe(this, { devices ->
devices?.forEach{
allDevices?.add(it)
}
} )
spinner3.adapter = allDevices
spinner3.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onItemSelected(parent: AdapterView<*>?, p1: View?, position: Int, p3: Long) {
if (parent != null) {
val idZebraString = parent.getItemAtPosition(position).toString()
idZebra = idZebraString.toInt()
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {
Toast.makeText(this@ZebraActivity, "You must choose some item", Toast.LENGTH_LONG).show() }
}
}
那是因为 .observe
方法,在每个项目开始时以及单个模型更改时都会调用该方法,但无论如何您都在调用 add
,导致重复
尝试检查此新项目是否已存在于适配器中,如果是则什么都不做或删除旧项目并添加新项目。例如
devices?.forEach{
if (allDevices.getPosition(it) < 0) allDevices?.add(it)
}
如果您有正确的模型声明(toString()
和哈希码),那应该可以工作