Android Kotlin获取所选选项的ID
我有多个选项选择,我需要得到所选选项的数组,但我得到的是最新的选项选择Android Kotlin获取所选选项的ID,android,kotlin,Android,Kotlin,我有多个选项选择,我需要得到所选选项的数组,但我得到的是最新的选项选择 code class PublishActivity : AppCompatActivity() { var selectedTags: List<String>? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
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()
}
}
}
但是在我的selectedTags
中,我只得到D/eeer1:[ActionScript]
它应该给我这样的东西D/eeer1:[“3D打印”、“3D架构”、“.NET/Mono”、“ActionScript”]
PS:我实际上希望在这里实现的是获取那些选定项的id
,而不是它们的名称,这就是为什么我有var tagIds=ArrayList()
,但如果这不可能实现,只要它只返回所有名称的数组(如上面的示例),我也没问题
有什么想法吗?以下代码将变量设置为一个包含单个项目的列表。所以你只是一遍又一遍地覆盖你的变量
selectedTags = listOf(tagOptions[i])
你需要:
//Declaration
var selectedTags: MutableList<String> = mutableListOf()
...
// In loop
selectedTags.add(tagOptions[i])
//声明
var selectedTags:MutableList=mutableListOf()
...
//循环中
选择标记。添加(标记选项[i])
您还可以采用更实用的方法:
//Declaration
var selectedTags: List<String>? = listOf()
...
// Skip the loop and use the map function
.setPositiveButton(resources.getString(R.string.ok)) { dialog, which ->
selectedTags = checkedItems.map{ tagOptions[it] }
}
//声明
var selectedTags:列表?=清单(
...
//跳过循环并使用map函数
.setPositiveButton(resources.getString(R.string.ok)){对话框,其中->
selectedTags=checkedItems.map{tagOptions[it]}
}
要获取Id而不是标题,您只需使用TagID而不是tagOptions即可。只要确保你打字正确就行了。selectedTags
列表的类型必须与tag.id相同。您只能获得最后一次插入的值,因为当单击ok
按钮并将其分配给selectedTags
时,您正在创建新列表。代码的selectedTags=listOf(tagOptions[i])
行出现问题
解决方案:
声明单个列表并将选定值放入其中。比如:
val selectedTags = arrayListOf<String>()
我得到了函数调用'listOf(…)'预期的
啊,抱歉,修复了它,它应该已经被选中了标签现在添加
是红色的,上面写着未解析的引用:添加
未解析的引用:放置
添加是正确的,它是可变列表上的一个方法,您是否将选定的标签更改为可变列表?(你不能在kotlin的列表中添加东西,因为它是不可变的)谢谢你,这部分已经通过Adam
的帮助解决了,我现在想要实现的是我的PS:
问题的一部分。对此有什么想法吗?使用类似于:val checkedItems=booleanarayof(false,false,false,false)
和在.setMultiChoiceItems
中刚刚设置:checkedItems[which]=checked}
val selectedTags = arrayListOf<String>()
.setPositiveButton("Ok") { dialog, which ->
for (i in checkedItems) {
//selectedTags = listOf(tagOptions[i])
selectedTags.add(tagOptions[i])
}
}