我想实时筛选ListView
。我在ActionBar
中有一个EditText
,每次用户写一个字符时,我都想更新ListView
的光标来过滤信息。
我已经做了一个AsyncTask
来执行查询,但我有两个问题:
1º)如果用户键入三个字符,我将创建三个AsyncTasks
(一个搜索第一个字符,一个搜索前两个字符,最后一个搜索三个字符)。有没有一种简单的方法可以对AsyncTask
说用新任务替换以前的任务?
2º)如何设置一个小延迟来启动AsyncTask
?因此,如果用户不停地键入三个字符,我将不会创建AsyncTask
,直到最后。
谢谢!
嗯。。。不完全确定您为什么使用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
,因此在我设置获取搜索结果后,告诉列表适配器数据集已更改。
希望这能有所帮助。