我想使用EditText在数据库中搜索,然后将项目添加到RecylerView。由于TextChangedListener和adapter.notifyDataSetChanged,我无法添加几个项目。我只能添加一项。 (查询必须在线程中)。如何添加我要搜索的每个项目?
CostDao.kt
@Dao
interface CostDAO {
@Query("select * from cost where name like :name")
fun getByName(name : String) : List<Cost>
在MainActivity.kt中,我得到了:
fun Threads() {
editText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(
s: CharSequence, start: Int,
count: Int, after: Int
) {
}
override fun onTextChanged(
s: CharSequence, start: Int,
before: Int, count: Int
) {
Thread {
val itemsList = db?.costDAO()!!.getByName(s.toString())
runOnUiThread {
recyclerView.adapter = MyAdapter(this@MainActivity, itemsList)
adapter.notifyDataSetChanged()
}
}.start()
}
override fun afterTextChanged(s: Editable) { }
现在,我只能搜索一个项目,项目显示,并且在更改编辑文本后它消失了,我希望它保留下来,我希望将我搜索的每个项目自动添加到RecyclerView中。
答案 0 :(得分:0)
将搜索字符串包装在通配符中(它至少应具有尾部的通配符<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
):
%
通常只查询例如。当val itemsList = db?.costDAO()!!.getByName("%" + s.toString() + "%")
时,为了不查询单个字符;而3-4个字符可能已经出现了非常相关的记录集。