Android SearchView异步任务UI未正确更新
我在实现searchview时遇到了一个问题,它会显示来自服务器的数据的结果。我目前使用AsyncTask,这样就不会阻塞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.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
}