android - Material 公开下拉菜单 OnItemSelectedListener 未被调用

标签 android kotlin material-design

我在我的应用程序中实现了 ExposedDropdownMenu,虽然很笨拙,但它完成了工作,并且我能够按照我想要的外观设计它的样式。在我的国家“旋转器”上,如果选择了加拿大,我希望将州列表更改为省份,然后填充加拿大省份列表。当我的“旋转器”是一个实际的 Spinner 时,OnItemSelectedListener 工作完美,但是,现在我已经将“旋转器”实现为一个 Spark 加工

这是我的代码:

// 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 的子类,用于在我不希望它过滤时防止过滤,但我应该能够可靠地使用该位置来确定要显示的内容。

最佳答案

我想到它是一种 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()
                }
            })

关于android - Material 公开下拉菜单 OnItemSelectedListener 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58568335/

相关文章:

android - JobScheduler.schedule(job) 没有启动 JobService

android - 如何使用 Android CameraX API 缩放相机?

Android 在 BottomNavigation 上制作重叠的 FloatingActionButton

reactjs - 如何使用 MenuItem 进行导航? Material -ui V1

android - Gradle:如何使用特定版本的快照?

Android AlarmManager setReating 和 setInexactRepeating

java - 在具有多个参数类型约束的 Kotlin 中调用具有泛型类型的方法

android - 如何在 Kotlin 中使用 Koin 注入(inject) ViewModel?

android - 在 Android 中 fragment 发生变化时如何使用 Material Design Transition?

android - 使用外部存储(私有(private))保存下载的文件