3

我想ListView实时过滤一个。我有一个EditTextActionBar每次用户写一个字符我想更新ListView过滤信息的光标。

我已经完成了AsyncTask查询,但我有两个问题:

1º)如果用户键入三个字符,我将创建三个AsyncTasks(一个用于搜索第一个字符,一个用于搜索前两个字符,最后一个用于搜索三个字符)。有没有一种简单的方法可以AsyncTask用新的任务替换以前的任务?

2º) 我怎样才能稍微延迟启动AsyncTask?因此,如果用户不停地键入三个字符,我将不会创建AsyncTask直到结束。

谢谢!

4

1 回答 1

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 数据库。MysearchResults用于填充ListView,因此在我设置 get 搜索结果后,告诉列表适配器数据集已更改。

希望这可以帮助。

于 2012-08-23T19:57:34.527 回答