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

Android Kotlin中如何为Spinner实现For-loop循环逻辑

问题原因

  • 资源名不匹配:布局中Spinner的实际id为sb_secret1~sb_secret6,但你循环内拼接的id名是sb_spinner_secret_p$i,和实际id不一致,getIdentifier会返回无效值0
  • 仅获取了资源ID,没有执行findViewById绑定Spinner实例,也没有补充适配器创建、绑定的逻辑,相当于循环内没有执行任何有效初始化操作

修正后的实现代码

如果6个Spinner都复用同一个R.array.secret数组资源,直接用以下代码即可:

for(i in 1..6) {
    // 匹配实际布局里的Spinner id格式
    val spinnerResId = resources.getIdentifier("sb_secret$i", "id", packageName)
    // 排除无效资源ID避免崩溃
    if(spinnerResId == 0) continue
    val spinner: Spinner = findViewById(spinnerResId)
    // 绑定适配器
    ArrayAdapter.createFromResource(this, R.array.secret, android.R.layout.simple_spinner_item).also { adapter ->
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter
    }
}

如果每个Spinner对应不同的数组资源,比如数组资源名为secret1~secret6,可以调整为:

for(i in 1..6) {
    val spinnerResId = resources.getIdentifier("sb_secret$i", "id", packageName)
    val arrayResId = resources.getIdentifier("secret$i", "array", packageName)
    if(spinnerResId == 0 || arrayResId == 0) continue
    val spinner: Spinner = findViewById(spinnerResId)
    ArrayAdapter.createFromResource(this, arrayResId, android.R.layout.simple_spinner_item).also { adapter ->
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter
    }
}

注意事项

  • getIdentifier第二个参数要和资源类型对应:id资源传id,数组资源传array,不要写错类型
  • 循环范围要和你实际的Spinner数量匹配,如果你只有6个Spinner就用1..6,不要写1..7避免无效查找

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:03