Android Kotlin: OnItemSelectedListener не вызывается с пользовательским адаптером - PullRequest
0 голосов
/ 24 апреля 2020

Я создал вертушку для выбора этажа. Вращающийся счетчик открывается программным способом, когда пользователь нажимает кнопку с плавающим действием следующим образом:

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
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...