今天有空学习了一下 PullToRefresh 这个开源控件的使用方法,功能很强大,效果也是不错,封装了 ListView, GirdView, ScrollView等常用控件,作者的GitHub 地址:https://github.com/chrisbanes/Android-PullToRefresh

    同时也参考了鸿洋老师关于该控件的博客 http://blog.csdn.net/lmj623565791/article/details/38238749,写的很详细。     自己也记一篇当作学习笔记吧。

    首先去那哥们儿github 下载下他的项目,把他的library 导入到自己项目里,关于如何在android studio里导入 library 我今天也是突然忘了。。。还是不熟悉,所以想把这个步骤写在这儿,牢固一下记忆;

1.准备好项目要用的library

2.在自己的项目下 File->New->Import Module


3.选择 要导入的 library ,导入后可以 对导入的 module 重命名,最后点击 finish;


4.在自己 app 的 build.gradle文件里 添加依赖


5.然后就可以在自己工程里面使用啦



OK, 既然已经导入PullToRefresh 的 相关 library;那就开始吧

先说ListView:

布局文件:

        


封装好了直接用;

下面看一下MainActivity里的代码:

public class MainActivity extends AppCompatActivity {    private LinkedList mListItems;    private ArrayAdapter mAdapter;    private int mItemCount = 9;    private PullToRefreshListView pullToRefreshListView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //girdView        //setContentView(R.layout.pulltorefresh_gridview_layout);        pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);        initData();        //ListView         mAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mListItems);        //GridView        //mAdapter = new ArrayAdapter(this,R.layout.gridview_item_layout,R.id.id_grid_item_text ,mListItems);        pullToRefreshListView.setAdapter(mAdapter);        //仅支持下拉刷新        pullToRefreshListView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);        //仅支持上拉刷新        //pullToRefreshListView.setMode(PullToRefreshBase.Mode.PULL_FROM_END);        //支持上拉,下拉刷新        //pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);        //禁用下拉刷新        //pullToRefreshListView.setMode(PullToRefreshBase.Mode.DISABLED);        //仅支持手动        //pullToRefreshListView.setMode(PullToRefreshBase.Mode.MANUAL_REFRESH_ONLY);        ILoadingLayout startLabels = pullToRefreshListView.getLoadingLayoutProxy();        startLabels.setPullLabel("start");        startLabels.setRefreshingLabel("ing");        startLabels.setReleaseLabel("end");        //下拉时显示的 icon      startLabels.setLoadingDrawable(getResources().getDrawable(R.drawable.ic_launcher));        //单向刷新        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.                                                   OnRefreshListener(){            @Override            public void onRefresh(PullToRefreshBase refreshView){                String label = DateUtils.formatDateTime(getApplicationContext(),                                                        System.currentTimeMillis(),                                                        DateUtils.FORMAT_SHOW_TIME|                                                        DateUtils.FORMAT_SHOW_DATE|                                                        DateUtils.FORMAT_ABBREV_ALL);                refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);                new GetDataTask().execute();            }        });        //双向刷新//        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.//                                                   OnRefreshListener2() {//            @Override//            public void onPullDownToRefresh(PullToRefreshBaserefreshView){////              String label = DateUtils.formatDateTime(getApplicationContext(),//                                                      System.currentTimeMillis(),//                                                      DateUtils.FORMAT_SHOW_TIME|//                                                      DateUtils.FORMAT_SHOW_DATE|//                                                      DateUtils.FORMAT_ABBREV_ALL);//        refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);////                new GetDataTask().execute();//            }////            @Override//            public void onPullUpToRefresh(PullToRefreshBase refreshView){////                new GetDataTask().execute();//            }//        });    }    private void initData(){        mListItems = new LinkedList();        for(int i = 0; i< mItemCount; i ++){            mListItems.add("" + i);        }    }    private class GetDataTask extends AsyncTask{        @Override        protected String doInBackground(Void... params) {            try{               Thread.sleep(2000);           }catch (InterruptedException e){                e.printStackTrace();            }            return null;        }        @Override        protected void onPostExecute(String s) {            mListItems.add("" + mItemCount++);            mAdapter.notifyDataSetChanged();            pullToRefreshListView.onRefreshComplete();        }    }}






代码的各个部分都是很容易理解的,我也加上了相应的注释,就不赘述了,这里主要说一下底下这个函数:

pullToRefreshListView.setOnRefreshListener

这个函数的功能作用在于让使用者定义 控件在刷新时要做的事儿,demo中是希望在refresh是异步更新 ListView的数据,并且利用

refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);

这句给刷新提示区绘制当前刷新时间戳;我们看到 pullToRefreshListView.setOnRefreshListener可以有两种类型的参数,一种是

new PullToRefreshBase.OnRefreshListener()

下的回调函数 onRefresh(); 另一种是

new PullToRefreshBase.OnRefreshListener2()

下的回调函数 onPullDownToRefresh() 和 onPullUpToRefreshBase();


具体调用哪个是依据这里:

        //仅支持下拉刷新        pullToRefreshListView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);        //仅支持上拉刷新        //pullToRefreshListView.setMode(PullToRefreshBase.Mode.PULL_FROM_END);        //支持上拉,下拉刷新        //pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);        //禁用下拉刷新        //pullToRefreshListView.setMode(PullToRefreshBase.Mode.DISABLED);        //仅支持手动        //pullToRefreshListView.setMode(PullToRefreshBase.Mode.MANUAL_REFRESH_ONLY);

显然当 setMode 为 BOTH时,就该调用调用下面那个来分别设置 下拉和 上拉 时内容啦~~


这里就 讲了 listView 相关,GridView 实现起来如出一辙,稍后上传自己的小demo,需要学习的可以一起哈~~

我也是个正在努力的小白,一起加油加油~ 


Demo 链接 :http://download.csdn.net/detail/dxdrush/9355629


更多相关文章

  1. 使用handler更新UI
  2. Android(安卓)下拉刷新(刷新布局需用ScrollView包裹)
  3. android项目迁移到androidX:类映射(android.support.constraint*)
  4. android实现RecyclerView上拉加载,下拉更新(4)
  5. doskey使用
  6. Mediacodec
  7. 【黑马Android】(03)学生管理系统/动态刷新界面
  8. android项目迁移到androidX:类映射(android.support.v7*)
  9. android刷新相册

随机推荐

  1. Android源码分析之WindowManager.LayoutP
  2. 工程师淘金:开发Android主攻四大方向
  3. 获取Android自己写好了的apk以及反编译
  4. 工程师淘金:开发Android主攻四大方向
  5. android 数据储存——网络存储(5)
  6. 【Android(安卓)Dev Guide - 01】 - What
  7. Android视图绘制流程完全解析,带你一步步
  8. Android(安卓)自定义组合控件
  9. 【Android自动化打包】03. APK的数字签名
  10. 一场关于Android的争论