gpt4 book ai didi

android - 如何从 kotlin 中的 ArrayList 中删除所有项目

转载 作者:行者123 更新时间:2023-11-29 16:28:52 25 4
gpt4 key购买 nike

我在 kotlin 中有一个数组列表,我想从中删除所有项目,将其保留为空数组以开始添加新的动态数据。我尝试了 ArrayList.remove(index) arrayList.drop(index) 但没有效果,

声明:

var fromAutoCompleteArray: List<String> = ArrayList()

我是这样尝试的:

for (item in fromAutoCompleteArray){
fromAutoCompleteArray.remove(0)
}

我正在使用 addTextChangedListener 删除旧数据并根据用户输入添加新数据:

    private fun settingToAutoComplete() {
val toAutoCompleteTextView: AutoCompleteTextView =
findViewById<AutoCompleteTextView>(R.id.toAutoCompleteText)
toAutoCompleteTextView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}

override fun afterTextChanged(s: Editable?) {
doLocationSearch(toAutoCompleteTextView.text.toString(), 2)

}

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
toAutoCompleteTextView.postDelayed({
toAutoCompleteTextView.showDropDown()
}, 10)
}

})
val adapter = ArrayAdapter(this, android.R.layout.select_dialog_item, toAutoCompleteArray)
toAutoCompleteTextView.setAdapter(adapter)
toAutoCompleteTextView.postDelayed({
toAutoCompleteTextView.setText("")
toAutoCompleteTextView.showDropDown()
}, 10)
}

这是添加数据的函数:

    private fun doLocationSearch(keyword: String, fromTo: Number) {
val baseURL = "api.tomtom.com"
val versionNumber = 2
val apiKey = "******************"
val url =
"https://$baseURL/search/$versionNumber/search/$keyword.json?key=$apiKey"
val client = OkHttpClient()
val request = Request.Builder().url(url).build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: okhttp3.Response) {
val body = response.body?.string()
println("new response is : $body")
val gson = GsonBuilder().create()
val theFeed = gson.fromJson(body, TheFeed::class.java)
if (theFeed.results != null) {
for (item in theFeed.results) {
println("result address ${item.address.freeformAddress} ")
if (fromTo == 1) {
fromAutoCompleteArray = fromAutoCompleteArray + item.address.freeformAddress
println(fromAutoCompleteArray.size)
} else {
toAutoCompleteArray = toAutoCompleteArray + item.address.freeformAddress
}
}
} else {
println("No Locations found")
}


}

override fun onFailure(call: Call, e: IOException) {
println("Failed to get the data!!")
}
})

}

如您所见,println(fromAutoCompleteArray.size) 行告诉我它是否被删除,并且它总是在增加。

此外,尝试在没有循环的情况下使用 clear() 但没有效果:

fromAutoCompleteArray.clear()

最佳答案

Kotlin 中的 List 类型是不可变的。如果你想让你的列表发生变化,你需要将它声明为一个MutableList

我建议更改此行:

var fromAutoCompleteArray: List<String> = ArrayList()

对此:

val fromAutoCompleteArray: MutableList<String> = mutableListOf()

然后你应该可以调用其中的任何一个:

fromAutoCompleteArray.clear()     // <--- Removes all elements
fromAutoCompleteArray.removeAt(0) // <--- Removes the first element

我还推荐 mutableListOf() 而不是自己实例化一个 ArrayList。 Kotlin 具有合理的默认值,并且更易于阅读。在大多数情况下,无论哪种方式,它最终都会做同样的事情。

只要有可能,最好还是使用 val 而不是 var

更新:Vals 不是 vars,感谢您发现 Alexey

关于android - 如何从 kotlin 中的 ArrayList 中删除所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58147014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com