你可能已经注意到了,提交搜索时, RecyclerView 要等好一会才能刷新显示搜索结果。请接受挑战,让搜索过程更流畅一些。用户一提交搜索,就隐藏软键盘,收起 SearchView 视图(回到只显示搜索按钮的初始状态)。再来个挑战。用户一提交搜索,就初始化 RecyclerView ,显示一个搜索结果加载状态界面(使用状态指示器)。下载到JSON数据之后,就删除状态指示器。也就是说,一旦开始下载图片,
就不应显示加载状态了
1.提交搜索,隐藏软键盘,收起SearchView;
将SearchView变为成员变量,增加一个InputMethodManager对象,在onCreate()方法中对其进行实例化。
private InputMethodManager mInputMethodManager; private SearchView mSearchView; mInputMethodManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
在PhotoGalleryFragment中增加隐藏软键盘,收起SearchView的方法,代码如下:
private void hintSoftInputAndSearchField(){
View v = getActivity().getCurrentFocus();
if(v == null){
return;
}
mInputMethodManager.hideSoftInputFromWindow(v.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); //折叠软键盘
mSearchView.onActionViewCollapsed(); //收起SearchView的方法。
}
然后在SearchView监听器的onQueryTextSubmit()方法中调用即可。
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {//提交搜索查询时。这个方法执行。
Log.d(TAG, "onQueryTextSubmit: "+ s);
QueryPreferences.setStoredQuery(getActivity(),s); //存储用户提交的查询信息。
updateItems();
hintSoftInputAndSearchField(); //隐藏键盘的方法
mProgressDialog= getDialog();
mProgressDialog.show();
return true;
}
......
});
2.显示一个搜索结果加载状态界面(使用状态指示器),当下载到JSON数据时删除。
1.增加一个ProgressDialog的成员变量。
public ProgressDialog mProgressDialog;
2.在SearchView监听器的onQueryTextSubmit()方法中让对话框显示出来。(进行搜索时候显示)
mProgressDialog= new ProgressDialog(getActivity()); mProgressDialog.setMessage("loading..."); mProgressDialog.setCancelable(true); mProgressDialog.show();
3.在FetchItemsTask类中的onPostExecute()方法中将对话框移除(获取到数据后关闭)
@Override protected void onPostExecute(List<GalleryItem> items){ mItems = items; if(mItems.size() > 0){ //如果有数据则关闭 mProgressDialog.dismiss(); } setupAdapter(); }