Android Spinner仅显示单个企业项:如何加载完整empresa列表?
解决Spinner仅显示单个企业条目的问题
你的代码核心问题是在循环内部重复创建列表、适配器并覆盖Spinner的配置——每次循环都会新建一个只包含当前企业的列表,然后把Spinner的适配器换成这个新的,最终Spinner只能保留最后一次循环的条目。
修正步骤
- 先在循环外初始化空的企业列表
- 遍历
clientes,把所有企业都添加到这个列表里 - 循环结束后,再统一创建适配器、设置给Spinner并配置选中监听器
修改后的完整代码
private fun initCharacter(clientes : List<ResultsEmpresa>) { // 循环外初始化空列表,用于存储所有企业数据 val listCliente: MutableList<SpinnerClientes> = ArrayList() // 遍历所有数据,将企业逐一加入列表 clientes.forEach { val empresas = it.empresa listCliente.add(SpinnerClientes(empresas)) } // 统一配置Spinner的适配器和监听器 val spnAdapter = SpinnerClientesAdapter(this@AddObra, R.layout.kecamatan, R.id.spinnerText, listCliente) spnClients?.adapter = spnAdapter spnClients?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected( parent: AdapterView<*>?, view: View, position: Int, id: Long,) { val desaDetails = spnAdapter.getItem(position) textView_empresa?.text = desaDetails.nom_empresa } override fun onNothingSelected(parent: AdapterView<*>?) {} } }
额外提示
建议把代码中的!!强制非空断言换成?.安全调用,避免因控件未初始化导致的空指针异常。
内容的提问来源于stack exchange,提问作者Rafel C.F
相关产品推荐
相关产品推荐

