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
相关产品推荐
相关产品推荐

