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

如何在Kotlin中从MultiSelectSpinner获取逗号分隔的项ID

解决MultiSelectSpinner获取选中项Id并拼接字符串的问题

我明白你的困扰了——你现在只把工程师的名字传给了MultiSelectSpinner,没法直接关联到对应的Id。咱们可以通过保留完整的工程师数据列表,在选中回调里根据选中位置匹配Id来解决这个问题,具体步骤如下:

步骤1:保留完整的Engineer列表引用

不要只提取名字到单独的列表,直接保留addJobResponse.engineerList的引用,这样我们能随时通过位置拿到对应的Id。

步骤2:修改MultiSelectSpinner的初始化与选中回调

在设置Spinner选项时,从Engineer列表生成名字列表;在选中回调里,遍历选中的布尔数组,找到选中的位置,取出对应Engineer的Id,最后拼接成逗号分隔的字符串设置到TextView中。

修改后的Kotlin代码如下:

// 直接保留完整的工程师列表(注意判空,避免空指针)
val engineerList = addJobResponse.engineerList ?: emptyList()

// 从工程师列表生成名字列表,传给MultiSelectSpinner
val engineerNames = engineerList.map { it.name.orEmpty() }

spin_engineer.setItems(engineerNames)
    .setListener<BaseMultiSelectSpinner>(object: BaseMultiSelectSpinner.MultiSpinnerListener {
        override fun onItemsSelected(selected: BooleanArray) {
            // 收集所有选中项的Id,过滤掉可能为null的情况
            val selectedIds = selected.mapIndexedNotNull { index, isSelected ->
                if (isSelected) engineerList[index].id?.toString() else null
            }
            
            // 将Id列表拼接成逗号分隔的字符串
            val idsString = selectedIds.joinToString(",")
            
            // 设置到TextView中
            tv_engineer_ids.text = idsString
        }
    })

关键说明:

  • mapIndexedNotNull:遍历选中数组的索引,当该位置被选中时,取出对应Engineer的Id并转为字符串,同时自动过滤掉Id为null的项(如果有的话)
  • joinToString(","):直接将Id列表拼接成逗号分隔的字符串,省去手动循环拼接的麻烦
  • 我们保留了完整的engineerList,所以能通过选中的位置精准匹配到对应的Id,而不是只依赖名字(避免重名导致的错误)

你的Engineer数据类和布局代码不需要修改,直接用原来的就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:25:16