PullToRefreshListView上拉加载、下拉刷新

说明:此项目使用studio完成的、需要导入library作为依赖,使用了xuitls获得网络请求、使用Pull解析了XML

//布局文件
<com.handmark.pulltorefresh.library.PullToRefreshListView    android:id="@+id/list_view"    android:layout_width="match_parent"    android:layout_height="match_parent" />

package com.bw.com.yuekao1;

import android.content.Context;import android.os.AsyncTask;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.util.Xml;import android.widget.ListView;import android.widget.Toast;

import com.bw.com.yuekao1.com.bw.yuekao1.bean.News;import com.bw.com.yuekao1.com.bw.yuekao1.bean.com.bw.yuekao1.adapter.MyAdapter;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import com.lidroid.xutils.HttpUtils;import com.lidroid.xutils.exception.HttpException;import com.lidroid.xutils.http.ResponseInfo;import com.lidroid.xutils.http.callback.RequestCallBack;import com.lidroid.xutils.http.client.HttpRequest;

import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;

import java.io.ByteArrayInputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;

public class MainActivity extends AppCompatActivity {    //封装结合    private List<News> news=new ArrayList<News>();    //PullToRefreshListView用于上拉加载、上拉刷新    private PullToRefreshListView lv;    private MyAdapter adapter;    //定义一个页数,分页加载    private int ye=1;    //使用Handler更新UI    private Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case 0:                    //获得线程发来的数据                    String text=(String) msg.obj;                    //XML解析                    toXml(text);                    break;

                default:                    break;            }        }    };

    private void toXml(String text) {        News newss=null;        try {            //将读取到的结果码   添加到XML里面            XmlPullParser Parser = Xml.newPullParser();            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(text.getBytes());           Parser.setInput(byteArrayInputStream,"utf-8");            //通过parse获得项目类型      相当于文件里面的属性吧            int eventType = Parser.getEventType();            //判断            while ((eventType != XmlPullParser.END_DOCUMENT)) {                String name = Parser.getName();                switch (eventType) {                    case XmlPullParser.START_TAG:                        if (name.equals("news")) {                            newss = new News();                        } else if (name.equals("id")) {                            String id = Parser.nextText();                            newss.setId(id);                        } else if (name.equals("title")) {                            String title = Parser.nextText();                            newss.setTitle(title);                        } else if (name.equals("body")) {                            String body = Parser.nextText();                            newss.setBody(body);                        } else if (name.equals("commentCount")) {                            String commentCount = Parser.nextText();                            newss.setCommentCount(commentCount);                        }                        else if (name.equals("author")) {                            String author = Parser.nextText();                            newss.setAuthor(author);                        }                        else if (name.equals("pubDate")) {                            String pubDate = Parser.nextText();                            newss.setPubDate(pubDate);                        }                        break;                    case XmlPullParser.END_TAG:                        if (name.equals("news")) {                            news.add(newss);                            //更新适配器                            if (adapter == null) {                                adapter = new MyAdapter(news,this);                                lv.setAdapter(adapter);                            } else {                                adapter .notifyDataSetChanged();                            }                        }                        break;                    default:                        break;                }                eventType=Parser.next();            }        } catch (XmlPullParserException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }

    };

//-------------onCreate中--------------    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //找到PullToRefreshListView的控件        lv= (PullToRefreshListView) findViewById(R.id.list_view);        //获得网络数据-传一个页数        huodeshuju(ye);        //设置适配器        adapter = new MyAdapter(news,this);        lv.setAdapter(adapter);        //设置PullToRefreshListView的模式,BOTH时,既可以刷新也可以加载        lv.setMode(PullToRefreshBase.Mode.BOTH);        //设置刷新的方法        lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {            @Override//下拉刷新            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {                //重新定义为第一页                ye=1;                Toast.makeText(MainActivity.this,""+ye,Toast.LENGTH_SHORT).show();               //获得数据             huodeshuju(ye);                //刷新适配器                adapter.notifyDataSetChanged();                //创建一个方法结束刷新                new FinishRefresh().execute();            }

            @Override//上拉加载更多            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {             //使页数加1                ye++;                Toast.makeText(MainActivity.this,""+ye,Toast.LENGTH_SHORT).show();                huodeshuju(ye);                adapter.notifyDataSetChanged();                new FinishRefresh().execute();            }        });    }
//使用的是HttpUtils请求网络数据——需要导入一个xuitls.jar包    private void huodeshuju(int ye) {        //创建HttpUtils        HttpUtils httpUtils=new HttpUtils();        //发送GET请求        httpUtils.send(HttpRequest.HttpMethod.GET, "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="+ye+"&pageSize=20", new RequestCallBack<String>() {            @Override//请求成功的方法            public void onSuccess(ResponseInfo<String> responseInfo) {                String str=responseInfo.result;                Message message=new Message();                message.what=0;                message.obj=str;                handler.sendMessage(message);            }         //请求失败的方法            @Override            public void onFailure(HttpException e, String s) {

            }        });    }

    //完成刷新的方法    private class FinishRefresh extends AsyncTask<Void, Void, Void> {        @Override        protected Void doInBackground(Void... params) {            return null;        }

        @Override        protected void onPostExecute(Void result){            //刷新完成            lv.onRefreshComplete();        }    }}
 
时间: 2024-12-20 01:21:42

PullToRefreshListView上拉加载、下拉刷新的相关文章

ListView上拉加载下拉刷新

主要用到了这个几个文件,MainActivity是界面的Activity,MyAdapter是ListView的自定义适配,MyListView是自定义带头部LIistView,如果只需要上拉加载就不需要:activity_main.xml是住界面,item.xml是ListView的子布局里面只有一个TextView,listview_footer.xml是listview的加载更多的底部布局,listview_header.xml是listview的头部布局. MainActivity.ja

XML解析及上拉加载下拉刷新

XML解析及上拉加载下拉刷新 1.XML格式 2.GData和XPath遍历 //配置XML库(配置完才能使用) //(1)添加头文件搜索路径 // Header Search Paths-> /usr/include/libxml2 //(2)添加二进制库 // Link library -> lixml2.dylib //(3)源文件添加编译选项 // -fno-objc-arc //(4)添加头文件 // #import "GDataXMLNode.h"*/ XPat

使用dragloader.js插件实现上拉加载/下拉刷新..

在写代码时候有个需求是,在触屏页面,为了加快页面加载速度,案件列表每页展示5条数据: 然后点击更多,展示下一页数据: 但是为了触屏更好的体验,改为往上滑动案件列表,加载下一页数据:就是要实现上拉加载/下拉刷新的效果: 我只用到了 上拉加载: 参考资料:http://blog.csdn.net/xb12369/article/details/39202711 下面是写的demo: html代码: <!DOCTYPE html> <html lang="en"> &

Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法

bug说明: Mint-ui中loadmore(上拉加载下拉刷新)组件 在 使用fastclick的情况下 ,在ios设备中滑动会触发点击事件: 解决方法: 我是按需引入,去项目中找到loadmore下的index.js,全部引入的要找mint下面mint-ui.common.js 路径如下:你的项目名/node_modules\mint-ui\lib\loadmore\index.js 搜索 handleTouchEnd ,记得写event进去 handleTouchEnd: function

微信小程序上拉加载下拉刷新

微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载的动画可能会是白色背景,会看不清. { "usingComponents": { "annicate": "/components/annicate/index" }, "navigationBarTitleText": &quo

移动端上拉加载下拉刷新

<template> <div class="wrapper" ref="wrapper"> <div class="content" > <div class="refresh" :class="{ativeRefresh:refresh}">刷新</div> <div class="ct-row" v-for=&quo

【PullToRefresh 系列一】 Android上拉加载下拉刷新控件详解

转载请注明:http://blog.csdn.net/duguang77/article/details/40921601 作者信息: PullToRefresh控件下载地址:https://github.com/chrisbanes/Android-PullToRefresh 作者:https://github.com/chrisbanes 百度网盘下载地址:http://pan.baidu.com/s/1o6umifw (一)导入方法: 1.下载后将extras,library,sample

上拉加载下拉刷新控件WaterRefreshLoadMoreView

效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on 13-9-18. // #import <UIKit/UIKit.h> #define kStartTo 0.7f #define kEndTo 0.15f #define kAnimationInterval (1.0f / 50.0f) NS_INLINE CGFloat distansBetween(CGPoint p1 , CGPoint p2) { ret

MJRefresh(上拉加载下拉刷新)

整理自:https://github.com/CoderMJLee/MJRefresh#%E6%94%AF%E6%8C%81%E5%93%AA%E4%BA%9B%E6%8E%A7%E4%BB%B6%E7%9A%84%E5%88%B7%E6%96%B0 1.导入:pod'MJRefresh' 2.结构图 3.默认下拉刷新 self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ //进入刷新状态后自

xlistview上拉加载 下拉刷新

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >