I have used Android's spinner for static values by setting string-array
in XML resources. This works without issue.
However, for a specific spinner, I need to set data dynamically based on API returns. While I have set the returned values into an array of strings, when I send this to the adapter, it expects type Int
(which a returned string-array from XML translates into).
I'm not sure how to make these arrays work within Kotlin to be received by the spinner.
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
}
}
})
how about like this:
ArrayAdapter
constructor rather than using createFromResource
function factoryaddAll
function to add itemval 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
}
}
})