我是Kotlin
语言的新手,我将从网站上加载Spinner
数据。因此,我使用Fuel Library作为我的httpGet
,httpPost
和...帮助程序库,而仅使用Spinner
控件将数据显示给用户。下面是我尝试过的代码:
var listOfLesson:List<String> = listOf()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.ostad_page)
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, listOfLesson)
"home/GetAllLessons".httpGet().responseString { request, response, result ->
when (result) {
is Result.Success -> {
val lessonsArray: List<tblLesson> =
Gson().fromJson(result.value, Array<tblLesson>::class.java).toList()
var index:Int = 0
for (lesson: tblLesson in lessonsArray) {
listOfLesson.plusElement(lesson.Title)
}
showSuccess("لیست دروس بارگذاری شد")
adapter.notifyDataSetChanged()
}
}
}
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
lessons.setAdapter(adapter)
adapter.notifyDataSetChanged()
}
当我跟踪Result.Success
部分时,一切正常,并且数据已成功从URL加载到listOfLesson
中,并且adapter.notifyDataSetChanged()
的执行没有任何错误,但结果是没有,并且没有向{添加任何条目{1}}。
在此先感谢:)
答案 0 :(得分:0)
在plusElement
上调用List
不会将元素添加到现有列表中(请记住,Kotlin中的List
是不可变的)。相反,它将创建一个添加了新项目的新列表。原始列表(适配器使用的列表)保持不变。此外,除了添加列表之外,您应该做的是直接将新项目添加到适配器。这样,适配器将自动更新,而无需调用notifyDataSetChanged()
。
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, ArrayList<String>())
"home/GetAllLessons".httpGet().responseString { request, response, result ->
when (result) {
is Result.Success -> {
Gson().fromJson(result.value, Array<tblLesson>::class.java)
.map { it.Title }
.let { adapter.addAll(it) }
showSuccess("لیست دروس بارگذاری شد")
}
}
}
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
lessons.setAdapter(adapter)