Я создал вертушку для выбора этажа. Вращающийся счетчик открывается программным способом, когда пользователь нажимает кнопку с плавающим действием следующим образом:
floatingActionButtonSelectFloor.setOnClickListener{
// Open spinner programmatically
switchFloorsSpinner.performClick()
}
Вращающийся счетчик хорошо открыт и содержит список этажей для выбора. Но когда я щелкаю, чтобы выбрать элемент этажа, обратные вызовы onNothingSelected
и onItemSelected
никогда не вызываются.
Где ошибка?
Функция createSpinner:
private fun createSpinner(buildingsList: MutableList<Building>) {
switchFloorsMutableList = mutableListOf()
// Create mutable list of building and floors data
for (building in buildingsList){
if (building.floors!!.isNotEmpty()) {
for (floor in building.floors) {
switchFloorsMutableList.add(SwitchFloor(building.id, building.name, floor.id, floor.name))
}
}
}
// Provide data to adapter
switchFloorsSpinner.adapter = SwitchFloorsDropdownAdapter(requireContext(), switchFloorsMutableList)
// Register listener
switchFloorsSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(p0: AdapterView<*>?) {
Log.i(tag, "onNothingSelected()") // NEVER CALLED !
}
override fun onItemSelected(parent: AdapterView<*>?, p1: View?, position: Int, p3: Long) {
var selectedSwitchFloorEl = (parent?.selectedItem as SwitchFloor)
Log.i(tag, "onItemSelected()") // NEVER CALLED !
}
}
}
SwitchFloorsDropdownAdapter:
class SwitchFloorsDropdownAdapter(ctx: Context, buildingsList: MutableList<SwitchFloor>) : ArrayAdapter<SwitchFloor>(ctx, 0, buildingsList) {
override fun getView(position: Int, recycledView: View?, parent: ViewGroup): View {
return this.createView(position, recycledView, parent)
}
override fun getDropDownView(position: Int, recycledView: View?, parent: ViewGroup): View {
return this.createView(position, recycledView, parent)
}
private fun createView(position: Int, recycledView: View?, parent: ViewGroup): View {
val switchFloorElement = getItem(position)
val view = recycledView ?: LayoutInflater.from(parent.context).inflate(R.layout.item_switchfloor_dropdown, parent, false)
view.switch_floor_text.text = switchFloorElement!!.buildingName + " / " + switchFloorElement!!.floorName
return view
}
}