【问题标题】:Set array from Kotlin to Android spinner when spinner expects XML string array当微调器需要 XML 字符串数组时,将数组从 Kotlin 设置为 Android 微调器
【发布时间】:2021-02-01 02:46:41
【问题描述】:

我通过在 XML 资源中设置 string-array 来使用 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
                }
            }
        })

【问题讨论】:

    标签: android kotlin spinner android-spinner


    【解决方案1】:

    这样怎么样:

    1. 它使用ArrayAdapter构造函数而不是使用createFromResource函数工厂
    2. 使用addAllfunction添加项目
    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
                    }
                }
            })
    
    

    【讨论】:

    • 最初,这不起作用,因为它不会消耗数组。所以我在使用 MutableList 时尝试了这个,并且允许它设置。感谢您引导我找到正确的答案!
    • 另外,我必须向 ArrayAdapter 添加一种 String 类型才能正常工作,但这些只是小修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多