一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - 分享Android中pullToRefresh的使用心得

分享Android中pullToRefresh的使用心得

2021-04-23 15:01石小峰 Android

這篇文章主要介紹了分享Android中pullToRefresh的使用心得的相關資料,需要的朋友可以參考下

pulltorefresh的導入

 

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

 分享Android中pullToRefresh的使用心得

然后在 new module界面選擇已經在本地的含有源代碼的pulltorefresh。

分享Android中pullToRefresh的使用心得

打開如下圖所示的open module settings 按鈕

 分享Android中pullToRefresh的使用心得

點擊app中的dependencies 中右邊框的"+"按鈕,選擇第三個 ,如下所示

 分享Android中pullToRefresh的使用心得

分享Android中pullToRefresh的使用心得

選擇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

 例子如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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的一些基本屬性和事件。

步驟一 綁定控件,設置屬性

綁定控件代碼如下:

?
1
2
private pulltorefreshlistview listview;
listview = (pulltorefreshlistview) findviewbyid(r.id.refresh_list_view);

設置刷新時顯示的刷新狀態

?
1
2
3
4
5
6
7
8
9
10
11
12
//對pulltolistview綁定adapter
listview.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 ,例子如下:

?
1
2
3
4
5
6
7
8
9
10
11
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新數據的方法。

 我這里的例子如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
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 分別在頭部加入數據和在尾部加入數據
 方法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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();

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 的其他監聽方法

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲首页国产精品丝袜 | 99久久一香蕉国产线看观看 | 国产大秀视频一区二区三区 | 美国高清xxxxx18| 日本不卡免免费观看 | 韩国日本在线观看 | 国产精品视频久久 | 男人猛激烈吃奶gif动态图 | 日韩理论在线观看 | 免费理伦片手机在线播放 | 干美女在线视频 | 无码专区aaaaaa免费视频 | 成人在线免费看 | 青青国产在线观看 | 日本人成在线视频免费播放 | japan在线观看 | 亚洲天堂三区 | 国产日韩一区二区三区 | 91九色国产porny | 亚洲四虎永久在线播放 | 好奇害死猫在线观看 | 日本理论片中文在线观看2828 | 免费成人在线观看视频 | 日本人成大片在线 | 第一次做m被调教经历 | 国产精品一区二区久久不卡 | 亚洲欧美视频在线播放 | 护士让我吃奶我扒她奶 | 亚洲国产在 | 亚洲2017久无码 | 美女被草逼 | 日b视频免费 | 成人免费网址 | 桃色公寓| 日本孕妇大胆孕交 | 欧美三级不卡在线观线看高清 | 国产a免费| xxxxxx性受 | 99精品网 | 好紧好爽范冰冰系列 | 国产日日操 |