Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin获取所选选项的ID_Android_Kotlin - Fatal编程技术网

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])
              }
            }