PullToRefresh下拉刷新和上拉加載

  <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_refresh_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="#00000000"    //設置背景透明
        android:divider="#19000000"      //分割線顏色
        android:dividerHeight="4dp"     //分割線高度
        android:fadingEdge="none"   // 設置上邊和下邊沒有黑色的陰影
        android:fastScrollEnabled="false"       //是不是允許快速滑動
        android:footerDividersEnabled="false"    //底部沒分割線
        android:headerDividersEnabled="false"     //頭部沒分割線
        android:smoothScrollbar="true"    //顯示變化滾動條高度
        
    /*  ptr:ptrDrawable="@drawable/default_ptr_flip"   //上拉下拉圖標
        ptr:ptrAnimationStyle="rotate"         //動畫效果 提供了兩個值 flip和rotate 默認爲rotate
        ptr:ptrRefreshableViewBackground    //設置整個mPullRefreshListView的背景色
        ptr:ptrHeaderBackground="#383838"         //上拉下拉時頭部的背景色
        ptr:ptrHeaderTextColor="#FFFFFF"        //上拉下拉時 文字顏色
        ptr:ptrHeaderSubTextColor    //設置頭部view副標題文字的顏色
        ptr:ptrMode                //模式pullFromStart(上拉刷新):pullFromEnd(下拉刷新):both;
        ptrScrollingWhileRefreshingEnabled      //刷新的時候,是否允許ListView或GridView滾動。覺得爲true比較好
        // 決定了Header,Footer以何種方式加入mPullRefreshListView,
        //   true爲headView方式加入,就是滾動時刷新頭部會一起滾動。
        ptrListViewExtrasEnabled
        
    */
/>
複製代碼

第二步 使用 ,先得到mPullRefreshListView  初始化的設置

複製代碼
   private int currentPage =1;
   第一次進來的時候加載第一頁的數據
    initData(1);     
    //mPullRefreshListView.setMode(Mode.PULL_FROM_END);//只支持上拉
    //mPullRefreshListView.setMode(Mode.PULL_FROM_START);//只支持下拉
    mPullRefreshListView.setMode(Mode.BOTH);//兩端刷新
    mPullRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel("上拉加載");
    mPullRefreshListView.getLoadingLayoutProxy(false, true).setRefreshingLabel("加載中");
    mPullRefreshListView.getLoadingLayoutProxy(false, true).setReleaseLabel("鬆開加載更多數據");
    
      這裏是監聽的配置
    mPullRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {  //注意這裏用的2
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                Toast.makeText(getApplicationContext(), "下拉刷新", Toast.LENGTH_LONG).show();
                 //時間
                String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
                            DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
                refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);//加上時間
                initData(currentPage)   //加載數據
            }
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                Toast.makeText(getApplicationContext(), "上拉獲取更多", Toast.LENGTH_LONG).show();
                  currentPage    = 1;
                  initData(currentPage);  // 下拉刷新
            }
        
    });
複製代碼

 加載數據的類 

複製代碼
private void initData(int page) {
        MessageListModel.get(toId + "", page).done(new ICallback() {
            @Override
            public void success(String response) {
                Gson gson = new Gson();
                 //解析json
                SearchResultBean searchResultBean = gson.fromJson(response, SearchResultBean.class); 
                if (null != searchResultBean) {
                    if (null == adapter) {  // 第一次
                        adapter = new AddProductAdapter(instance);   //當前的實例instance
                        //adapter.setHandler(handler);
                        mPullRefreshListView.getAdapterView().setAdapter(adapter);
                    }
                    ArrayList<ProductBean> list = searchResultBean.getProducts();    //  得到集合數據
                     //page爲1 的時候 清理集合 ,否則不清理集合 調用下面的方法
                    adapter.addData(list, page == 1 ? true : false);
                    adapter.notifyDataSetChanged();
                    if (searchResultBean.isHasNext()) { //判斷有沒個一下
                        currentPage = currentPage + 1;
                    } else {
                        listview.setPullToRefreshEnabled(false);   // 沒了禁用
                        //ToastUtil.toast(self, "沒有更多數據");
                    }
                }
                listview.onRefreshComplete();  //完成
                setSearchCount();  //設置頁面的數量
            }
        });
    }
複製代碼

附錄: 方法
adapter 裏面的兩個方法

複製代碼
private ArrayList<ProgramBean> data;
        public void addData(List<ProgramBean> list, boolean clear) {    //傳true清理集合
            if (clear) {
                clear();
            }
            if (null == data) {
                data = new ArrayList<ProgramBean>();
            }
            if (null != list && list.size() > 0) {
                this.data.addAll(list);
            }
        }
         /**
         * 清理集合
         */
        private void clear() {
            if (null != data) {
                data.clear();
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章