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

Kotlin:如何提取Spinner选中项的description属性值

问题:从Spinner选中项提取Mood的description属性

我创建了包含image和description属性的Mood数据类:

data class Mood(val image: Int, val description: String)

接着实现了Spinner适配器并关联到Spinner控件:

binding.todayMood.adapter = activity?.applicationContext?.let {
    MoodArrayAdapter(
        it,
        listOf(
            Mood(R.drawable.ic_emotion_1, "많이 슬퍼요"),
            Mood(R.drawable.ic_emotion_2, "슬퍼요"),
            Mood(R.drawable.ic_emotion_3, "평범해요"),
            Mood(R.drawable.ic_emotion_4, "좋아요"),
            Mood(R.drawable.ic_emotion_5, "많이 좋아요"),
        )
    )
}

我希望将Spinner选中项的description值存入数据库,但binding.todayMood.selectedItem返回的是Any类型,无法直接通过binding.todayMood.selectedItem.description访问属性,调用toString()得到的是Mood(image=123, description="hi")格式的字符串,请问如何仅提取description值?


解决方案

1. 直接类型强转

selectedItem本质是你传入的Mood对象,只需将其强转为Mood类型即可直接访问description属性:

val selectedMood = binding.todayMood.selectedItem as Mood
val targetDescription = selectedMood.description
// 此时targetDescription就是可存入数据库的字符串

为避免空指针或类型转换异常,推荐使用安全转换+空合并运算符做兜底:

val targetDescription = (binding.todayMood.selectedItem as? Mood)?.description ?: ""

2. 优化适配器的类型返回

如果你的MoodArrayAdapter继承自ArrayAdapter,可以重写getItem()方法明确返回Mood类型,让代码更清晰:

class MoodArrayAdapter(
    context: Context,
    private val moodItems: List<Mood>
) : ArrayAdapter<Mood>(context, 0, moodItems) {
    override fun getItem(position: Int): Mood {
        return moodItems[position]
    }

    // 重写getView等方法实现Spinner的UI展示...
}

之后通过选中位置获取Mood对象:

val selectedPosition = binding.todayMood.selectedItemPosition
val selectedMood = binding.todayMood.adapter.getItem(selectedPosition)
val targetDescription = selectedMood.description

3. 不推荐:解析toString()结果

虽然可以通过字符串截取解析toString()的输出获取description,但这种方式依赖Mood类的toString()实现,一旦类结构或toString()逻辑变更,代码就会失效,因此不建议使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:50:25