В моем приложении реализовано 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
для предотвращения фильтрации, когда я не хочу, чтобы он фильтровал, но я должен иметь возможность надежно использовать положение, чтобы определить, что показывать.