Раскрываемое раскрывающееся меню Материал OnItemSelectedListener не вызывается - PullRequest
0 голосов
/ 26 октября 2019

В моем приложении реализовано ExposedDropdownMenu, и, несмотря на то, что оно работает, оно выполняет свою работу, и я могу стилизовать его так, как я хочу. В моей стране "spinner", я хочу, чтобы список штатов изменился на провинции, если будет выбрана Канада, а затем заполнить списком канадских провинций. Когда мой «спиннер» был фактическим Spinner, OnItemSelectedListener работал безупречно, тем не менее, он больше не меняется взад и вперед теперь, когда я реализовал «спиннер» как EDM

Вот мойcode:

// get country spinner values and change state/zip options depending on country selected
val countryAdapter = MaterialSpinnerAdapter<String>(it, R.layout.material_spinner_item, it.resources.getStringArray(R.array.country))
country_dropdown.setAdapter(countryAdapter)
country_dropdown.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
                override fun onItemSelected(
                    parent: AdapterView<*>?,
                    view: View?,
                    position: Int,
                    id: Long
                ) {
                    displayStatesForSelectedCountry(position)
                }

                override fun onNothingSelected(parent: AdapterView<*>?) {
                    displayDefaultStatesList()
                }
}

    private fun displayStatesForSelectedCountry(position: Int) {
        context?.let {
            val canadaAdapter = MaterialSpinnerAdapter<String>(it, R.layout.material_spinner_item, it.resources.getStringArray(R.array.states_of_canada))

            when(position) {
                1 -> {
                    displayDefaultStatesList()
                }
                2 -> {
                    state_dropdown.setAdapter(canadaAdapter)
                    enrollment_zip_code.hint = it.resources.getString(R.string.enrollment_hint_postal_code)
                    enrollment_zip_code.editText?.inputType = InputType.TYPE_CLASS_TEXT
                }
                else -> displayDefaultStatesList()
            }
        }
    }

Думая, что, возможно, поведение изменилось, я попытался реализовать OnItemClickedListener вместо этого:

country_dropdown.setOnItemClickListener { parent: AdapterView<*>?,
                                                      view: View?,position:
                                                      Int,id: Long ->
                displayStatesForSelectedCountry(position)
            }

Без кубиков. Я знаю, что слушатели не вызывают вообще, потому что подсказка почтового индекса, по крайней мере, изменится на почтовый, но это не так. Что я здесь не так делаю? я не должен использовать положение? если нет, то почему нет? MaterialSpinnerAdapter это просто подкласс ArrayAdapter для предотвращения фильтрации, когда я не хочу, чтобы он фильтровал, но я должен иметь возможность надежно использовать положение, чтобы определить, что показывать.

1 Ответ

0 голосов
/ 26 октября 2019

Мне пришло в голову, что это тип EditText, так что это работает:

            country_dropdown.addTextChangedListener(object: TextWatcher {
                override fun afterTextChanged(s: Editable?) {
                }

                override fun beforeTextChanged(
                    s: CharSequence?,
                    start: Int,
                    count: Int,
                    after: Int
                ) {
                }

                override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                    displayStatesForSelectedCountry(s.toString())
                    viewModel.country.value = s.toString()
                }
            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...