亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

分享Android中pullToRefresh的使用心得

2020-04-11 11:09:54
字體:
來源:轉載
供稿:網友

pullToRefresh的導入

首先,點擊new按鈕 -> import Module

 

然后在 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 的其他監聽方法

關于步驟三今天時間有限,先給大家分享到這里,后續持續更新。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国自产精品中文字幕亚洲| 亚洲人成电影在线观看天堂色| 亚洲欧洲中文天堂| 亚洲国产古装精品网站| 另类天堂视频在线观看| 不卡av在线网站| 国产亚洲人成a一在线v站| 欧美日本高清视频| 成人欧美一区二区三区黑人| 国产美女91呻吟求| 国产91久久婷婷一区二区| 国产狼人综合免费视频| 亚洲黄页视频免费观看| 国产精品色悠悠| 视频直播国产精品| 亚洲第一国产精品| 久久久国产视频| 蜜臀久久99精品久久久无需会员| 亚洲码在线观看| 日韩欧美国产免费播放| 欧美精品久久久久| 按摩亚洲人久久| 亚洲a一级视频| 欧美高跟鞋交xxxxxhd| 2019中文字幕在线| 亚洲成年网站在线观看| 久久亚洲精品视频| 97视频在线观看成人| 日本精品久久中文字幕佐佐木| 亚洲免费小视频| 久久天天躁狠狠躁夜夜躁| 午夜精品一区二区三区在线播放| 久久精品一区中文字幕| 国产亚洲欧洲高清| 欧美一性一乱一交一视频| 日韩最新中文字幕电影免费看| 亚洲偷熟乱区亚洲香蕉av| 91在线视频九色| 51精品国产黑色丝袜高跟鞋| 亚洲一区中文字幕| 精品中文字幕在线| 国产成人激情小视频| 亚洲第一福利在线观看| 久久久人成影片一区二区三区观看| 国产精品久久久久秋霞鲁丝| 这里只有精品丝袜| 98精品国产高清在线xxxx天堂| 懂色av一区二区三区| 国产视频福利一区| 精品成人乱色一区二区| 国产精品视频999| 成人福利视频网| 最好看的2019的中文字幕视频| 国产91精品不卡视频| 亚洲精品国产综合久久| 秋霞成人午夜鲁丝一区二区三区| 亚洲最大av网| 欧美精品九九久久| 日韩在线观看免费| 国产91精品久久久久久久| 日韩在线观看视频免费| 国产美女搞久久| 91国内精品久久| 中文字幕久热精品在线视频| 亚洲a在线观看| 欧美性xxxxxxxxx| 亚洲午夜色婷婷在线| 欧美第一黄网免费网站| 亚洲成人aaa| 91精品国产综合久久香蕉| 91chinesevideo永久地址| 少妇激情综合网| 欧美极品少妇xxxxx| 成人444kkkk在线观看| 国产在线观看一区二区三区| 亚洲欧美999| 欧美另类极品videosbest最新版本| 亚洲а∨天堂久久精品喷水| 日韩网站免费观看| 亚洲第一黄色网| 中文字幕久热精品在线视频| 亚洲成人精品视频在线观看| 欧美专区日韩视频| 中文字幕亚洲在线| 欧美超级免费视 在线| 亚洲春色另类小说| 欧美大秀在线观看| 色偷偷噜噜噜亚洲男人的天堂| 日本高清+成人网在线观看| 97免费中文视频在线观看| 日韩精品中文字| 国产精品一区二区3区| 欧美性69xxxx肥| 成人国产亚洲精品a区天堂华泰| xxav国产精品美女主播| 久久伊人精品一区二区三区| 国产一区二区三区高清在线观看| 欧美日韩一区二区免费视频| 爽爽爽爽爽爽爽成人免费观看| 奇米影视亚洲狠狠色| 亚洲成人a级网| 亚洲色图17p| 精品久久久久久中文字幕大豆网| 欧美性极品少妇精品网站| 国产精品青青在线观看爽香蕉| 法国裸体一区二区| 久久影视三级福利片| 最好看的2019年中文视频| 精品人伦一区二区三区蜜桃网站| 久久久久亚洲精品| 91精品久久久久久久久中文字幕| 精品亚洲一区二区三区四区五区| 久久香蕉频线观| 狠狠综合久久av一区二区小说| 亚洲欧美精品伊人久久| 国产午夜精品视频免费不卡69堂| 精品国产一区二区在线| 日韩免费在线电影| 欧日韩在线观看| 精品欧美aⅴ在线网站| 91在线观看免费高清| 亚洲精品之草原avav久久| 夜夜躁日日躁狠狠久久88av| 九九热视频这里只有精品| 亚洲综合小说区| 欧美激情a∨在线视频播放| 狠狠综合久久av一区二区小说| 国产成人一区二区三区电影| 91chinesevideo永久地址| 欧美日韩免费在线观看| 亚洲电影免费观看高清完整版在线| 欧美亚洲在线观看| 久久久精品电影| 国产男女猛烈无遮挡91| 欧美精品在线网站| 日韩免费在线观看视频| xxxx欧美18另类的高清| 这里只有视频精品| 97在线日本国产| 成人福利在线视频| 亚洲国产欧美一区二区丝袜黑人| 91久久久精品| 欧美另类精品xxxx孕妇| 亚洲国产成人精品女人久久久| 国产欧美日韩免费看aⅴ视频| 日韩欧美黄色动漫| 欧美在线观看网站| 亚洲欧美日韩中文在线制服| 人人做人人澡人人爽欧美| 久久久午夜视频| 国产成人精品a视频一区www| 亚洲精品国精品久久99热| 国产精品美女久久久久久免费| 国产精品视频导航| 国产va免费精品高清在线观看| 久久精品国产清自在天天线| 国产精品久久久精品| 日韩电影免费在线观看中文字幕| 欧美成人全部免费| 精品夜色国产国偷在线| 国内伊人久久久久久网站视频| 51视频国产精品一区二区| 国产精品视频网站| 69久久夜色精品国产7777|