我想实时过滤ListView
。我在EditText
中有一个ActionBar
,每次用户写一个字符时我想更新过滤信息的ListView
光标。
我已经完成AsyncTask
来执行查询,但我有两个问题:
1º)如果用户键入三个字符,我正在创建三个AsyncTasks
(一个用于搜索第一个字符,一个用于搜索两个第一个字符,最后一个用于搜索三个字符)。有没有一种简单的方法可以说AsyncTask
用新的任务替换上一个任务?
2º)如何稍微延迟启动AsyncTask
?因此,如果用户在不停止的情况下键入三个字符,我将不会在结束前创建AsyncTask
。
谢谢!
答案 0 :(得分:5)
嗯...不完全确定您为何实时使用AsyncTask
进行搜索。这就是我(并且已经成功)做到的方式。
将TextChangeListener
添加到Edittext
:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
searchResults = myDbHelper.searchAll(s.toString());
searchAdapter.notifyDataSetChanged();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
每次用户按下某个键时,我都在搜索sqlite数据库。我的searchResults
用于填充ListView
,因此在设置获取搜索结果后,告诉列表适配器数据集已更改。
希望这有帮助。