Доброго времени суток! Не могу сделать нормальный поиск по списку, а именно при вводе данных он показывает то, что надо, но если убрать текст из EditText'а, то список обратно не восстанавливается. Помогите решить эту проблему, пожалуйста.
Код, который привязан к EditText'у
var search = view!!.findViewById<View>(R.id.search) as EditText
search.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) {
var k: Int = 0
var size: Int = recovery.size
while(k < size){
var obj: String = recovery.get(k).colorName
if(!obj.contains(s.toString())){
if(s.toString() == ""){
initList(view!!.context, 0)
}else {
recovery.removeAt(k)
}
}
size = recovery.size
adapter!!.notifyDataSetChanged()
k++
recovery = listOfDMC
}
}
override fun afterTextChanged(s:Editable) {
}
})
Тут создается копия листа(recovery), и в ней должен происходить поиск и удаление не нужных элементов. Я не ищу в listOFDMC т.к. он достаточно длинный и инициализировать его заново занимает некоторое время.
Код метода initList
fun initList(context: Context, type: Int){
var db = DBHelper(context)
var sql = db.writableDatabase
var req = "SELECT * FROM ${CreateTable.dbName}"
var cursor = sql.rawQuery(req, null)
cursor.moveToFirst()
var k: Int = 0;
var size: Int = cursor.count
while(k < size){
var preview: String = cursor.getString(cursor.getColumnIndex(CreateTable.COLOR_NUMBER))
when(type){
0 -> {
var colorDMC = cursor.getString(cursor.getColumnIndex(CreateTable.DMC_COLOR))
var haveDMC = cursor.getString(cursor.getColumnIndex(CreateTable.DMC_HAVE))
var notHaveDMC = cursor.getString(cursor.getColumnIndex(CreateTable.DMC_NOT_HAVE))
recovery.add(MaterialDeafult(preview, colorDMC, haveDMC, notHaveDMC))
}
//...
//
//...
}
cursor.moveToNext()
k++
}
}
Буду благодарен за помощь.