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();
    
            }
  • 相关阅读:
    R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
    yolov3的anchor机制与损失函数详解
    CV资料推荐
    测试用例设计方法总结
    测试需求分析
    bug生命周期
    linux命令一
    linux 命令二
    linux 命令三
    mysql数据库和禅道安装
  • 原文地址:https://www.cnblogs.com/chase1/p/7218943.html
Copyright © 2011-2022 走看看