Android中ListView上拉加載更多及下拉刷新
做幾乎每一個Android應用開發,都少不了用到一個控件,那就是ListView,用于加載多條數據,并用一定的樣式展示出來。但是為了性能問題(一 次性加載太多數據,比如100000條,耗費時間長,消耗資源多等)及用戶體驗問題(比如用戶只想看最新的10條數據,結果一下子把所有的上萬條數據都加 載了,不方便用戶選擇)等原因,所以我們要把ListView的數據進行分頁加載,常用的就是ListView的上拉加載更多及下拉刷新最新數據。
我們可以自己封裝一個帶上下拉功能的ListView,通常就是加上頭部HeaderView和底部FooterView,然后通過顯示的數據條數與總數 據條數據判斷是否可以上拉,再用相應的監聽來實現上下拉刷新操作,這些網上有大把資料。今天貼的代碼是在工作中用到的,已經有開源庫封裝好的開源控件 PullToRefreshListView。其實源碼下載地址是:https://github.com/chrisbanes/Android-PullToRefresh ,詳細用法可以點擊查看。
PullToRefreshListView的用法很簡單,同ListView是一樣的,要給其提供數據的適配器Adapter,然后setAdapter()以及點擊事件都是一樣的。我把我在工作中用到的上下拉刷新實現代碼簡單貼出來,做個筆記:
privatePullToRefreshListView freshListView; privateBeforeRecordAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.......); freshListView= (PullToRefreshListView) findViewById(R.id.period_record_lv);//所在頁面布局文件中對應PullToRefreshListView freshListView.setMode(Mode.BOTH);//模式為上下拉 /* * Mode.BOTH:同時支持上拉下拉 *Mode.PULL_FROM_START:只支持下拉Pulling Down *Mode.PULL_FROM_END:只支持上拉Pulling Up * 如果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的時候只調用onPullUpToRefresh()方法. */ freshListView.setOnRefreshListener(newOnRefreshListener2<ListView>() { @Override public voidonPullDownToRefresh(PullToRefreshBase<ListView> arg0) { //下拉刷新實現 CURRENT_PAGE= 1;//分頁加載,下拉刷新的都是第1頁的數據 getData();//從服務器取數據 } @Override public voidonPullUpToRefresh(PullToRefreshBase<ListView> arg0) { //上拉加載更多 CURRENT_PAGE++;//分頁加載,上拉加載下一頁面數據 getData();//從服務器取數據 } }); adapter = new BeforeRecordAdapter(this);//適配器 freshListView.setAdapter(adapter);//設置數據 freshListView.setOnItemClickListener(beforeItemClick);//item點擊事件 } //加載服務器數據,或是自己構造數據 privatevoid getData(){ //首先是獲取到請求的數據,計算出數據的數量totalSize //然后根據totalSize來判斷freshListView應該處理哪種模式,比如數據加載完了就不能再上拉刷新 if(totalSize == 0) { freshListView.setMode(Mode.DISABLED); } else if (adapter.getCount() >= totalSize) { freshListView.setMode(Mode.PULL_FROM_START); } else { freshListView.setMode(Mode.BOTH); } freshListView.onRefreshComplete(); }
這樣就可以簡單地實現上下拉功能,當然如果原來的刷新或加載樣式不滿意,可以自己改寫就可以啦!
本文由用戶 f663x 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!