国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > 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 的其他監聽方法

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛冈县| 新丰县| 平度市| 龙陵县| 婺源县| 苍梧县| 绿春县| 德清县| 呼玛县| 陆良县| 霍邱县| 京山县| 惠水县| 镇雄县| 秭归县| 托克托县| 格尔木市| 湘西| 呼图壁县| 河北省| 尚义县| 紫阳县| 天峨县| 芮城县| 健康| 巧家县| 黄陵县| 海阳市| 澄江县| 华池县| 长丰县| 宝丰县| 新邵县| 永修县| 张家界市| 锦州市| 临夏市| 博客| 通许县| 大余县| 衡阳市|