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

首頁 > 系統 > Android > 正文

android使用PullToRefresh框架實現ListView下拉刷新上拉加載更多

2019-10-22 18:21:23
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android實現ListView下拉刷新上拉加載更多的具體代碼,供大家參考,具體內容如下

android,PullToRefresh,ListView,下拉刷新,上拉加載

其實谷歌官方目前已經推出ListView下拉刷新框架SwipeRefreshLayout,想了解的朋友可以點擊 android使用SwipeRefreshLayout實現ListView下拉刷新上拉加載 了解一下;

大家不難發現當你使用SwipeRefreshLayout下拉的時候布局文件不會跟著手勢往下滑,而且想要更改這個缺陷好像非常不容易。

雖然SwipeRefreshLayout非常簡單易懂,但是需求需要下拉刷新的時候跟著手勢下滑就不能用SwipeRefreshLayout了;

上面圖片效果使用的是PullToRefresh框架,在我的工程里面沒有導入類庫和jar包,而是把下拉刷新功能直接抽取出來使用;
當下拉的時候回調監聽,在抽取完下拉刷新功能的基礎上實現上拉加載更多功能實現也非常簡單,所以順手寫上了;
我是從github上下載的Android-PullToRefresh-master框架,在library中抽取的;
首先需要復制的類大概有十個左右:

android,PullToRefresh,ListView,下拉刷新,上拉加載

然后跟進報錯查看需要什么文件就復制什么文件;把錯誤搞定之后首先來看下布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical">   <!-- 我們添加了一個屬性:ptr:ptrMode="both" ,意思:上拉和下拉都支持。   可選值為:disabled(禁用下拉刷新),pullFromStart(僅支持下拉刷新),   pullFromEnd(僅支持上拉刷新),both(二者都支持),manualOnly(只允許手動觸發) -->  <!--   ptr:ptrAnimationStyle="rotate"   FlipLoadingLayout為iOS風格的箭頭顛倒的刷新動畫   ptr:ptrAnimationStyle="flip"   RotateLoadingLayout為android風格的圖片旋轉動畫 -->  <com.ptrflv.www.pulltorefreshlistview.PullToRefreshListView   xmlns:ptr="http://schemas.android.com/apk/res-auto"   android:id="@+id/pull_to_refresh_listview"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   ptr:ptrMode="both"   ptr:ptrAnimationStyle="flip"    />  </LinearLayout>

 值得注意的是默認情況下下拉刷新的執行動畫中顯示的文本是英文,這里我們需要手動修改pull_refresh_strings.xml中的內容:

<?xml version="1.0" encoding="utf-8"?> <resources>   <!-- 上拉刷新 -->  <!-- …代表三個點 ... -->  <string name="pull_to_refresh_pull_label">向下拉刷新…</string>  <string name="pull_to_refresh_release_label">松開更新…</string>  <string name="pull_to_refresh_refreshing_label">正在加載…</string>   <!-- 下拉加載更多 -->  <string name="pull_to_refresh_from_bottom_pull_label">向下拉加載更多…</string>  <string name="pull_to_refresh_from_bottom_release_label">松開加載更多…</string>  <string name="pull_to_refresh_from_bottom_refreshing_label">正在加載…</string>  </resources> 

下面是調用下拉刷新和上下加載更多的代碼:

public class MainActivity extends Activity {   private PullToRefreshListView pullToRefreshListView;  //adapter的數據源  private List<String> numList=new ArrayList<String>();  private ArrayAdapter<String> arrayAdapter;    @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   pullToRefreshListView=(PullToRefreshListView) findViewById(R.id.pull_to_refresh_listview);   //初始化數據   for(int x=0;x<18;x++){    numList.add(""+x);   }      arrayAdapter = new ArrayAdapter<String>(this, R.layout.item_listview,R.id.textview,numList);   pullToRefreshListView.setAdapter(arrayAdapter);      //設定刷新監聽   pullToRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() {     @Override    public void onRefresh(PullToRefreshBase<ListView> refreshView) {          String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),        DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);           // 顯示最后更新的時間      refreshView.getLoadingLayoutProxy() .setLastUpdatedLabel(label);           //代表下拉刷新      if(refreshView.getHeaderLayout().isShown()){             new Thread(){        public void run() {         try {          sleep(1000);                   handler.sendEmptyMessage(99);                  } catch (InterruptedException e) {          e.printStackTrace();         }        };       }.start();      }           //代表下拉刷新      if(refreshView.getFooterLayout().isShown()){       new Thread(){        public void run() {         try {          sleep(1000);                   handler.sendEmptyMessage(98);                  } catch (InterruptedException e) {          e.printStackTrace();         }        };       }.start();      }         }   });     }    private Handler handler=new Handler(){   public void handleMessage(android.os.Message msg) {        if(msg.what==99){     numList.add(0, "英雄聯盟");     arrayAdapter.notifyDataSetChanged();     //關閉刷新的動畫     pullToRefreshListView.onRefreshComplete();    }        if(msg.what==98){     numList.add(numList.size(), "魔獸世界");     arrayAdapter.notifyDataSetChanged();     //關閉刷新的動畫     pullToRefreshListView.onRefreshComplete();    }       };  };  } 

在判斷上拉刷新和下拉加載的時候
refreshView.getFooterLayout().isShown()
refreshView.getHeaderLayout().isShown()會報錯,因為PullToRefreshBase這兩個方法默認不是共有方法,我們需要手動該更為public

源碼下載

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中宁县| 专栏| 石屏县| 兴仁县| 准格尔旗| 镇康县| 桐庐县| 长沙市| 敦煌市| 石家庄市| 忻城县| 龙胜| 成安县| 肥东县| 北京市| 鄄城县| 鄱阳县| 怀集县| 天长市| 万载县| 宜都市| 泌阳县| 沙坪坝区| 株洲县| 永修县| 房山区| 万年县| 贵定县| 柞水县| 乌兰察布市| 宁波市| 尖扎县| 富顺县| 临朐县| 石门县| 交口县| 文山县| 全南县| 张家港市| 晋州市| 原阳县|