Android SearchView异步任务UI未正确更新

Android SearchView异步任务UI未正确更新,android,android-asynctask,android-actionbar,searchview,Android,Android Asynctask,Android Actionbar,Searchview,我在实现searchview时遇到了一个问题,它会显示来自服务器的数据的结果。我目前使用AsyncTask,这样就不会阻塞UI。我是如何实现它的: searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextChange(String query) { if (query.length() > 0) {

我在实现searchview时遇到了一个问题,它会显示来自服务器的数据的结果。我目前使用AsyncTask,这样就不会阻塞UI。我是如何实现它的:

searchView.setOnQueryTextListener(new OnQueryTextListener() {

    @Override
    public boolean onQueryTextChange(String query) {

        if (query.length() > 0) {
            new GetSearchByNameResultTask(searchView).execute(query);
        } else {
            return false;
        }

        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String arg0) {
        // TODO Auto-generated method stub
        return false;
    }

});
GetSearchByNameResultTask

加载历史代码:

问题 一切正常。我正在得到搜索结果。但我在更新视图时遇到问题。最好用一个例子来解释:

数据:

搜索文本:Hel

结果:

Hello World Hello Helicopter 搜索文本:地狱


多余的空间是我的问题。在我键入“Hello”之前,listview不会更新以适应结果。

我忘了回答这个问题

我设法解决了这个问题,尽管这对我来说有点麻烦。以下是我所做的:

    @Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    searchAdapter = new SearchAdapter(this,  cursor, false);

    mSearchView.setSuggestionsAdapter(searchAdapter );

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            searchAdapter.notifyDataSetChanged();
        }
    }, 200);

    //Reload fragment to show list
}
这将强制刷新搜索视图的适配器。这里的键是新的Handler.postdayed

希望这个解决方案有帮助

Hell Hello Helicopter Hello World Hello Helicopter Hell Hello [extra empty space]
    @Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    searchAdapter = new SearchAdapter(this,  cursor, false);

    mSearchView.setSuggestionsAdapter(searchAdapter );

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            searchAdapter.notifyDataSetChanged();
        }
    }, 200);

    //Reload fragment to show list
}