不幸的是,我对Kotlin和Android还很陌生。
我通过API获得一个对象列表,并希望将每个列表项显示为微调器中的一个选项,以在此基础上生成一个新的API请求
我的API响应如下:
[User(username=a, id=1, email=a@a.com),
User(username=b, id=2, email=b@b.com),
User(username=c, id=3, email=c@c.com)]
我只想在微调器中显示所有用户名,当选择用户名时,使用所选用户的ID启动另一个API请求。
不幸的是,我在Kotlin Spinner文档和谷歌搜索中没有找到任何方法来设置片段中的微调器选项,以选择名称并将ID存储在变量中。
有没有办法在科特林不费吹灰之力就能做这样的事情,或者我想错了?
您可以将用户列表传递给ArrayAdapter:
val list: MutableList<User> = arrayListOf(
User("a", 1, "a@a.com"),
User("b", 2, "b@b.com"),
User("c", 3, "c@c.com"),
User("d", 4, "d@d.com")
)
val arrayAdapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
list
)
将适配器设置为您的微调器:
val spinner = findViewById<Spinner>(R.id.spinner)
spinner.adapter = arrayAdapter
然后根据你的逻辑,你可以添加一个按钮,在它的点击监听器中,你可以选择整个选定的用户对象:
button.setOnClickListener {
//Here you have the selected user with it's id
val selectedUser = spinner.selectedItem as User
}
或者,您可以设置一个在项目上选择的侦听器,然后再次选择整个用户对象:
spinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
if (parent is Spinner) {
//Here you have the selected user with it's id
val selectedUser = parent.selectedItem as User
}
}
override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("Not yet implemented")
}
}
现在要制作微调器,只需覆盖User类中的toString((函数并返回用户名:
class User(val username: String, val id: Int, val email: String) {
override fun toString(): String {
return username
}
}
我希望这正是你想要的。同样因为我是软件开发的新手,我希望看到更有经验的人对这种方法是否好的反馈。