Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 实时过滤ListView_Android_Android Listview_Android Asynctask - Fatal编程技术网

Android 实时过滤ListView

Android 实时过滤ListView,android,android-listview,android-asynctask,Android,Android Listview,Android Asynctask,我想实时过滤列表视图。我在ActionBar中有一个EditText,每次用户写入字符时,我都想更新ListView过滤信息的光标 我已经完成了一个AsyncTask任务来执行查询,但我有两个问题: 1º)如果用户键入三个字符,我将创建三个异步任务(一个搜索第一个字符,一个搜索前两个字符,最后一个搜索三个字符)。有没有一种简单的方法可以告诉AsyncTask用新任务替换上一个任务 2º)如何在启动异步任务时稍微延迟一点?因此,如果用户不停地键入三个字符,我将不创建AsyncTask,直到结束 谢

我想实时过滤
列表视图
。我在
ActionBar
中有一个
EditText
,每次用户写入字符时,我都想更新
ListView
过滤信息的光标

我已经完成了一个
AsyncTask
任务来执行查询,但我有两个问题:

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

2º)如何在启动
异步任务时稍微延迟一点?因此,如果用户不停地键入三个字符,我将不创建
AsyncTask
,直到结束


谢谢

Hmmm…不完全确定为什么要使用
AsyncTask
进行实时搜索。以下是我将如何(并且已经成功)做到这一点

文本更改侦听器
添加到您的
编辑文本

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数据库。My
searchResults
用于填充
ListView
,因此在设置get the search results之后,告诉列表适配器数据集已更改


希望这有帮助。

您可以使用异步任务,因为您不想在UI线程上运行长查询。将其放在UI线程上会使界面感觉笨拙和缓慢。使用此方法,您可以设置一个计时器,使其在200毫秒内运行,以执行异步任务的查询。如果在第一个计时器运行之前键入了另一个字符,则取消第一个字符并开始一个新字符…取决于查询的大小。我在searchAll方法中运行了三个查询,没有明显的延迟。正如John所说,异步任务是不使用长时间查询冻结UI。事实上,在SDK的最新版本中(我认为是API 11和后续版本),如果您尝试在UI线程中执行查询,dalvik会抛出一个异常。无论如何,谢谢,使用TextWatcher并取消任务(如果存在是一个好主意:)要检查计时器是否已设置,您认为使用同步布尔变量是一个好方法吗?