Android中ListView上拉載入更多及下拉重新整理

來源:互聯網
上載者:User

標籤: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();

}

 這樣就可以簡單地實現上下拉功能,當然如果原來的重新整理或載入樣式不滿意,可以自己改寫就可以啦!


Android中ListView上拉載入更多及下拉重新整理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.