android - 当微调器需要 XML 字符串数组时,将数组从 Kotlin 设置为 Android 微调器
问题描述
我通过设置string-array
XML 资源将 Android 的微调器用于静态值。这没有问题。
但是,对于特定的微调器,我需要根据 API 返回动态设置数据。虽然我已将返回值设置为字符串数组,但当我将其发送到适配器时,它需要类型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
函数添加项目
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
}
}
})
推荐阅读
- java - 使用 MethodHandles 远程运行单元测试的意外异常
- c - 我在双向链表中的交换代码有问题
- php - 上传的 CSV 文件有 4 列,没有标题。需要创建数组并为每一列分配一个特定的键值
- php - 预检响应不允许 cors 错误标头
- sql - 我怎样才能避免多次使用 xml 路径的东西?
- laravel - 在 vue-laravel 惯性应用程序中设置 firebase 网络推送通知
- r - 使用 R 从数据框中的 url 中抓取内容
- ruby - SocketError:sockaddr 解析为多个节点名
- node.js - Blazor Server 与 socket.io 的合作
- windows - 您好,我尝试在 dev-c++ 中运行我的 c 代码并得到以下信息:[错误] 'for' 循环初始声明仅在 C99 或 C11 模式下允许