• PullToRefresh------ListView的使用


    第一步 :写出布局文件的设置

      <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();
                }
            }
  • 相关阅读:
    PDA设备小知识--(IP)工业防护等级含义
    实施项目--如何推进项目实施进度
    Git.Framework 框架随手记--存储过程简化
    Git.Framework 框架随手记--SQL配置文件的使用
    Git.Framework 框架随手记--ORM查询数据集合 二
    介绍 Scratch 3.0:扩展编码创造力
    微服务架构:引领数字化转型的基石
    网易云技术开放日 云安全专场分享圆满结束
    JVM调优推荐
    springboot + mybatis + 多数据源
  • 原文地址:https://www.cnblogs.com/java-g/p/4147658.html
Copyright © 2020-2023  润新知