You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何为Spinner绑定SQLite数据库对应的id与name值

实现方案

步骤1:修正AnimalData类错误并添加toString方法

你当前的AnimalData类第一个构造函数中存在this.note = note的报错代码,类中未定义note属性,先删除该行。之后重写toString方法,控制Spinner默认展示的选项内容为动物名称:

class AnimalData{
    var id : Int = 0
    var name : String = ""
    var species : String = ""
    var origin : String = ""

    constructor(id: Int, name: String, species: String, origin: String){
        this.id = id
        this.name = name
        this.species = species
        this.origin = origin
    }

    constructor(id: Int, name :String){
        this.id = id
        this.name = name
    }
    
    // 控制Spinner选项展示的文本为动物名称
    override fun toString(): String {
        return name
    }
}

步骤2:给Spinner绑定AnimalData数据源

直接将你查询得到的animals列表作为适配器的数据源,不需要单独拆分id和name列表:

// 替换成你布局里Spinner的实际id
val animalSpinner: Spinner = findViewById(R.id.animal_spinner)
// 初始化适配器,使用系统默认Spinner样式,数据源为AnimalData列表
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, animals)
// 设置下拉列表的样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
animalSpinner.adapter = adapter

步骤3:获取选中项的id和名称

选中项直接对应完整的AnimalData对象,完全不依赖position和id的映射关系,不会出现删除数据后id错位的问题:

// 选中事件监听
animalSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
    override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
        val selectedAnimal = parent?.getItemAtPosition(position) as AnimalData
        // 直接获取数据库存储的id和对应名称
        val selectedAnimalId = selectedAnimal.id
        val selectedAnimalName = selectedAnimal.name
        // 后续基于selectedAnimalId执行业务逻辑即可
    }

    override fun onNothingSelected(parent: AdapterView<*>?) {
        // 无选中状态的处理逻辑,按需编写
    }
}

// 也可以在任意时机主动获取当前选中项
val currentAnimal = animalSpinner.selectedItem as AnimalData
val currentId = currentAnimal.id

实现说明

  • Spinner每个选项绑定的是完整的AnimalData对象,仅通过重写toString方法控制展示的文本为name,对象内部的id始终和数据库存储的id一致,和选项的位置没有绑定关系
  • 数据库增删数据后只需要重新查询最新的AnimalData列表、刷新Spinner适配器即可,不会出现id和选项错位的问题

内容的提问来源于stack exchange,提问作者Droid Buddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:24:06