实时筛选ListView



我想实时筛选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,因此在我设置获取搜索结果后,告诉列表适配器数据集已更改。

希望这能有所帮助。

最新更新