当微调器需要 XML 字符串数组时,将 Kotlin 中的数组设置为 Android 微调器
Set array from Kotlin to Android spinner when spinner expects XML string array
我通过在 XML 资源中设置 string-array
来使用 Android 的静态值微调器。这没有问题。
但是,对于特定的微调器,我需要根据 API returns 动态设置数据。虽然我已将返回值设置为字符串数组,但当我将其发送到适配器时,它需要类型 Int
(从 XML 返回的字符串数组转换为)。
我不确定如何让这些数组在 Kotlin 中工作以被微调器接收。
val managerSpinner: Spinner = binding.spinnerManager
val managerList: MutableList<String> = mutableListOf()
var managerArr: Array<String>
viewModel.managers.observe(viewLifecycleOwner, {
if (null != it) {
it.items?.forEach { manager ->
managerList.add(manager.fullname!!)
}
managerArr = managerList.toTypedArray()
ArrayAdapter.createFromResource(
activity?.applicationContext!!,
managerArr!!,
android.R.layout.simple_spinner_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
managerSpinner.adapter = adapter
}
}
})
这样怎么样:
- 它使用
ArrayAdapter
构造函数而不是使用 createFromResource
函数工厂
- 使用
addAll
function 添加项目
val managerSpinner: Spinner = binding.spinnerManager
val managerList: MutableList<String> = mutableListOf()
var managerArr: Array<String>
viewModel.managers.observe(viewLifecycleOwner, {
if (null != it) {
it.items?.forEach { manager ->
managerList.add(manager.fullname!!)
}
managerArr = managerList.toTypedArray()
ArrayAdapter(
activity?.applicationContext!!,
android.R.layout.simple_spinner_item
).also { adapter ->
adapter.addAll(managerArr)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
managerSpinner.adapter = adapter
}
}
})
我通过在 XML 资源中设置 string-array
来使用 Android 的静态值微调器。这没有问题。
但是,对于特定的微调器,我需要根据 API returns 动态设置数据。虽然我已将返回值设置为字符串数组,但当我将其发送到适配器时,它需要类型 Int
(从 XML 返回的字符串数组转换为)。
我不确定如何让这些数组在 Kotlin 中工作以被微调器接收。
val managerSpinner: Spinner = binding.spinnerManager
val managerList: MutableList<String> = mutableListOf()
var managerArr: Array<String>
viewModel.managers.observe(viewLifecycleOwner, {
if (null != it) {
it.items?.forEach { manager ->
managerList.add(manager.fullname!!)
}
managerArr = managerList.toTypedArray()
ArrayAdapter.createFromResource(
activity?.applicationContext!!,
managerArr!!,
android.R.layout.simple_spinner_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
managerSpinner.adapter = adapter
}
}
})
这样怎么样:
- 它使用
ArrayAdapter
构造函数而不是使用createFromResource
函数工厂 - 使用
addAll
function 添加项目
val managerSpinner: Spinner = binding.spinnerManager
val managerList: MutableList<String> = mutableListOf()
var managerArr: Array<String>
viewModel.managers.observe(viewLifecycleOwner, {
if (null != it) {
it.items?.forEach { manager ->
managerList.add(manager.fullname!!)
}
managerArr = managerList.toTypedArray()
ArrayAdapter(
activity?.applicationContext!!,
android.R.layout.simple_spinner_item
).also { adapter ->
adapter.addAll(managerArr)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
managerSpinner.adapter = adapter
}
}
})