如何将数据传递给微调器

How to pass data to spinner

我有:

data class User( var name: String, var category: String) : Serializable

和一个微调器:

val categoryList: List<Category> = ArrayList()

categoryList.add(Category("beginner", 0xFFFFFFFF.toInt()))
categoryList.add(Category("intermediate", 0xFFE57373.toInt()))
categoryList.add(Category("advanced", 0xFFFFF176.toInt()))

为了保存数据,我这样做了:

editTextName.text.toString(),
spinner.selectedItem.toString()

现在我想从另一个方面做同样的事情:

editTextname.setText(user.name)
spinner. ???????  (user.category)

我不知道该放什么???????

所以现在我发现了这个:

spinner.setSelection(user.category)

但是 setSelection() 需要一个 Int 而我需要一个 String

也许有人有想法?

我的猜测是您应该传递到微调器适配器中 user.category 的 setSelection 位置。我不知道你的微调器适配器是什么样子,但我想这应该可以完成工作

先改

val categoryList: List<Category> = ArrayList()

进入

val categoryList: ArrayList<Category> = ArrayList()

然后使用

val category = categoryList.filter { category -> category.FIRST_PROPERTY == user.category}
spinner.setSelection(categoryList.indexOf(category))

不要忘记将 FIRST_PROPERTY 替换为类别 class 中你的名字 属性。

或者,您可以使用此方法:

private fun selectValue(spinner: Spinner, value: Any) {
    for (i in 0 until spinner.count) {
        if (spinner.getItemAtPosition(i) == value) {
            spinner.setSelection(i)
            break
        }
    }
}

我终于找到了解决问题的方法。

var position = 0

for (item in categoryList) {
    if (item.category == user.category){
       position = categoryList.indexOf(item)
    }
}

所以之后你可以做:spinner.setSelection(position)