通过类库library实现下拉刷新上拉加载

  首先导入类库,添加到所需的项目中

这是布局文件

   <com.handmark.pulltorefresh.library.PullToRefreshListView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:id="@+id/lv"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        ptr:ptrMode="both" >
    </com.handmark.pulltorefresh.library.PullToRefreshListView>

 接下来写下拉刷新,上拉加载的逻辑判断

private ArrayList<Detail> list=new ArrayList<Detail>();
    private PullToRefreshListView lv;
    private MyListAdapter adapter;
    private int p=10;
    private Handler handler = new Handler() {

        public void handleMessage(android.os.Message msg) {

            if (msg.what == 0) {
                String data = (String) msg.obj;
                // 解析Json数据
                Gson gson = new Gson();
                AllData ad = gson.fromJson(data, AllData.class);
                list=ad.getData();
                adapter = new MyListAdapter(MainActivity.this, list);
                lv.setAdapter((ListAdapter) adapter);
                adapter.notifyDataSetChanged();
                lv.onRefreshComplete();
            }if(msg.what==1){
                String data = (String) msg.obj;
                // 解析Json数据
                Gson gson = new Gson();
                AllData ad = gson.fromJson(data, AllData.class);
                list.addAll(ad.getData());
                adapter.notifyDataSetChanged();
                lv.onRefreshComplete();
            }

        };
    };

// 找到需要显示新闻的listview
        lv = (PullToRefreshListView) findViewById(R.id.lv);
        new Thread() {
            public void run() {
                readData();
            }

        }.start();

//给listview设置下拉刷新和上拉加载的刷新监听事件

lv.setOnRefreshListener(new OnRefreshListener2<ListView>() {

            @Override
            public void onPullDownToRefresh(
                    PullToRefreshBase<ListView> refreshView) {
                // 刷新时间
                String label = DateUtils.formatDateTime(
                        getApplicationContext(), System.currentTimeMillis(),
                        DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE
                                | DateUtils.FORMAT_ABBREV_ALL);

                // Update the LastUpdatedLabel
                refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
                new Thread() {
                    public void run() {
                        try {
                            Thread.sleep(2000);
                            z=z-1;
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        readData();//下拉和初始化数据可以使用同一个方法
                        
                    }
                }.start();

            }

            @Override
            public void onPullUpToRefresh(
                    PullToRefreshBase<ListView> refreshView) {
                new Thread() {
                    public void run() {
                        try {
                            Thread.sleep(2000);
                            p=p+1;
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        readData1();
                        
                    }

                    
                }.start();
               
            }
        });

//以下是下拉刷新和初始化数据的方法

    protected void readData() {
        try {
            URL url = new URL(
                    "http://api.expoon.com/AppNews/getNewsList/type/1/p/"+z);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(8000);
            conn.setConnectTimeout(5000);
            InputStream is = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuilder str = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                str.append(line);
            }
            Message msg = new Message();
            msg.what = 0;
            msg.obj = str.toString();
            handler.sendMessage(msg);
            Log.i("line", str.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

//这是上拉加载的方法

    private void readData1() {
        try {
            URL url = new URL(
                    "http://api.expoon.com/AppNews/getNewsList/type/1/p/"+p);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(8000);
            conn.setConnectTimeout(5000);
            InputStream is = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuilder str = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                str.append(line);
            }
            Message msg = new Message();
            msg.what = 1;
            msg.obj = str.toString();
            handler.sendMessage(msg);
            Log.i("line", str.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }



原文地址:https://www.cnblogs.com/daidai123/p/5549998.html