分享Android中pullToRefresh的使用心得

分享Android中pullToRefresh的使用心得,第1张

概述pullToRefresh的导入首先,点击new按钮->importModule 然后在NewModule界面选择已经在本地的含有源代码的pullToRefresh。

pullToRefresh的导入

首先,点击new按钮 -> import Module

 

@H_502_10@

然后在 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.PullToRefreshListVIEw    xmlns: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在刷新的时候出现的特效,比如第一个是指定刷新时显示的图片,第二个是指定刷新的图片以何种方式显示出来,第三个是指定刷新时头部的背景,第四个是指定刷新时头部字体的颜色。

以上这些都可以在代码中设置。

ListVIEw中每个item的xml还是不变的,adapter的使用和写法也是不变的,需要改变的只有设定刷新事件。

接下来在代码中设定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刷新时状态就设定好了。

步骤二 pullToRefreshListVIEw监听事件的设置

这里主要设置setonRefreshListener 事件,根据刚才设置的不同的刷新模式,在里面写的匿名内部类也不一样。

 规则如下:

 如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。 

如果Mode设置成Mode.PulL_FROM_START或Mode.PulL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。

当然也可以设置为OnRefreshListener2,但是Mode.PulL_FROM_START的时候只调用onPullDownToRefresh()方法,Mode.PulL_FROM_END的时候只调用onPullUpToRefresh()方法.

这样在进入该Activity时候,手动上拉和下拉就会实现刷新和加载。

 如果想刚进入Activity的时候就执行加载,则要调用如下方法

 ListvIEw.setRefreshing();

接下来只需要在onPullDownToRefresh和onPullUpToRefresh 编写要获取ListvIEw新数据的方法。

 我这里的例子如下:

 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当中。

接下来 new Finishrefresh().execute(); 是这里我比较疑惑的一个固定写法,在这个com.handmark.pulltorefresh.library.PullToRefreshListVIEw 框架下,执行onRefreshComplete();方法必须在异步下执行,不能和主进程一起执行,如果直接在下拉,上拉监听方法中写入onRefreshComplete(); 则在实际刷新中刷新状态的显示header是不会收回去的,换句话说 刷新一直不会完成。

所以要在继承AsyncTask的类下调用onRefreshComplete();

 private class Finishrefresh extends AsyncTask<VoID,VoID,VoID> {    @OverrIDe    protected VoID doInBackground(VoID... params) {      try {        Thread.sleep(1000);      } catch (InterruptedException e) {      }      return null;    }    @OverrIDe    protected voID onPostExecute(VoID aVoID) {      ListvIEw.onRefreshComplete();      adapter.notifyDataSetChanged();    }  }

至此,pullToRefreshListvIEw就实现了简单的上拉,下拉使用

步骤三 pullToRefresListVIEw 的其他监听方法

关于步骤三今天时间有限,先给大家分享到这里,后续持续更新。

总结

以上是内存溢出为你收集整理的分享Android中pullToRefresh的使用心得全部内容,希望文章能够帮你解决分享Android中pullToRefresh的使用心得所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1142205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存