【发布时间】:2021-04-20 06:43:26
【问题描述】:
我有多个选项选择,我需要获取选定选项的数组,但我得到的只是选择了最新的选项。
Code
class PublishActivity : AppCompatActivity() {
var selectedTags: List<String>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_publish)
pTags.setOnClickListener {
var tagIds = ArrayList<String>()
val tagOptions = ArrayList<String>()
for (i in tags) {
tagOptions.add(i.title)
tagIds.add(i.id)
}
var checkedItems = ArrayList<Int>()
checkedItems.forEach{ index -> tagIds[index + 1] }
MaterialAlertDialogBuilder(this)
.setTitle(resources.getString(R.string.project_tags))
.setMultiChoiceItems(tagOptions.toTypedArray(), null) { dialog, which, checked ->
if (checked) {
checkedItems.add(which)
} else if (checkedItems.contains(which)) {
checkedItems.remove(Integer.valueOf(which))
}
// Respond to item chosen
pTags.setText("${checkedItems.size} tags selected")
}
.setPositiveButton(resources.getString(R.string.ok)) { dialog, which ->
for (i in checkedItems) {
Log.d("eeee1", tagOptions[i])
selectedTags = listOf(tagOptions[i])
}
}
.setNeutralButton(resources.getString(R.string.clear)) { dialog, which ->
pTags.text = null
pTags.hint = "0 tag selected"
if (checkedItems.size > 0) {
checkedItems.clear()
}
}
.show()
}
}
}
Log.d("eeee1", tagOptions[i])在logcat中返回这样的数据
D/eeee1: 3D Printing
D/eeee1: 3D Architecture
D/eeee1: .NET/Mono
D/eeee1: ActionScript
但在我的selectedTags 中,我只得到D/eeer1: [ActionScript]
它应该给我这样的东西D/eeer1: ["3D Printing", "3D Architecture", ".NET/Mono", "ActionScript"]
PS:我实际上希望在这里实现的是获得
id中的selected items而不是他们的名字,这就是我拥有var tagIds = ArrayList<String>()的原因,但如果这无法实现只要它只返回所有名称的数组(如上面的示例),我也可以。
有什么想法吗?
【问题讨论】:
-
使用类似:
val checkedItems = booleanArrayOf(false, false, false, false)并在刚刚设置的.setMultiChoiceItems中:checkedItems[which] = checked}