zoukankan      html  css  js  c++  java
  • 安卓权威编程指南 挑战练习 25章 深度优化 PhotoGallery 应用

    你可能已经注意到了,提交搜索时, 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();
    
            }
  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/chase1/p/7218943.html
Copyright © 2011-2022 走看看