然后在 New Module界面选择已经在本地的含有源代码的pullToRefresh。
打开如下图所示的open Module Settings 按钮
点击app中的Dependencies 中右边框的"+"按钮,选择第三个 ,如下所示
选择Modules : pullToRefreshLibrary ,点击OK
然后在build.gradle(Module:app)或者你自己要写的那个android 程序的根文件夹的build.gradle中加入下面一句话
compile project(":pullToRefreshLibrary")
自此,pullToRefresh已经导入成功,可以新建一个pullToRefrenshListView验证一下。
pullToRefreshListView的基本使用
pullToRefreshListView和ListView的使用基本差的不多,只不过ListView的xml要换成
com.handmark.pulltorefresh.library.PullToRefreshListView
例子如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.handmark.pulltorefresh.library.PullToRefreshListViewxmlns:ptr="http://schemas.android.com/apk/res-auto"android:layout_height="match_parent"android:layout_width="match_parent"android:id="@+id/refresh_list_view"ptr:ptrDrawable="@drawable/default_ptr_flip"ptr:ptrAnimationStyle="flip"ptr:ptrHeaderBackground="#383838"ptr:ptrHeaderTextColor="#FFFFFF" ></com.handmark.pulltorefresh.library.PullToRefreshListView></LinearLayout>上面的例子中pullToRefreshListView中多了几个属性 分别以ptr开头,这是指定pullToRefreshListView在刷新的时候出现的特效,比如第一个是指定刷新时显示的图片,第二个是指定刷新的图片以何种方式显示出来,第三个是指定刷新时头部的背景,第四个是指定刷新时头部字体的颜色。
private PullToRefreshListView listview;listview = (PullToRefreshListView) findViewById(R.id.refresh_list_view);设置刷新时显示的刷新状态
//对pullToListView绑定adapterlistview.setAdapter(adapter); /*设置pullToRefreshListView的刷新模式,BOTH代表支持上拉和下拉,PULL_FROM_END代表上拉,PULL_FROM_START代表下拉 */ listview.setMode(PullToRefreshBase.Mode.BOTH);initRefreshListView(); initRefreshListView方法设置刷新显示的状态 public void initRefreshListView() {ILoadingLayout Labels = listview.getLoadingLayoutProxy(true, true);Labels.setPullLabel("快点拉");Labels.setRefreshingLabel("正在拉");Labels.setReleaseLabel("放开刷新");}这里通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别,第一个true 代表下来状态 ,第二个true 代表上拉的状态 。如果想区分上拉和下拉状态的不同,可以分别设置getLoadingLayoutProxy ,例子如下:
public void initRefreshListView(){ILoadingLayout startLabels = pullToRefresh.getLoadingLayoutProxy(true, false);startLabels.setPullLabel("下拉刷新");startLabels.setRefreshingLabel("正在拉");startLabels.setReleaseLabel("放开刷新");ILoadingLayout endLabels = pullToRefresh.getLoadingLayoutProxy(false, true);endLabels.setPullLabel("上拉刷新");endLabels.setRefreshingLabel("正在载入..."); endLabels.setReleaseLabel("放开刷新...");这样pullToRefreshListView刷新时状态就设定好了。
listview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {adapter.addToTop();new FinishRefresh().execute();} @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {adapter.addToBottom();new FinishRefresh().execute();}});我这里在自定义的adapter中写了2个新方法 addToTop 和addToBottom 分别在头部加入数据和在尾部加入数据
private void addToTop() {for (int i = 0; i < 2; i++) { Item item = new Item(); item.setText("在头部加入第" + i + "数据"); item.setImageid(R.mipmap.ic_launcher); listItems.add(i, item);}}private void addToBottom() {for (int i = 0; i < 2; i++) { Item item = new Item(); item.setText("在尾部加入第" + i + "数据"); item.setImageid(R.mipmap.ic_launcher); listItems.add(item); }}这里并没有考虑去重的问题,就是每次刷新结束后会显示出刷新的结果,当再次刷新后,又会执行和上次一样的结果,实际上,这是不符合逻辑的,当第二次在刷新的时候应该进行判断,如果数据一样就不把数据加入到list当中。
private class FinishRefresh extends AsyncTask<Void, Void, Void> {@Overrideprotected Void doInBackground(Void... params) {try {Thread.sleep(1000);} catch (InterruptedException e) {}return null;}@Overrideprotected void onPostExecute(Void aVoid) {listview.onRefreshComplete();adapter.notifyDataSetChanged();}}至此,pullToRefreshListview就实现了简单的上拉,下拉使用