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

eclipse中的项目:

//注意:此刷新功能是使用的第三方的PullToRefreshScrollView,因此需要导入第三方library作为依赖

步骤:导入第三方library,依赖:点击你的应用程序右击,再点击properties,再点击Android,再点击add,选中library,点击OK

//请求网路需要配置完网络权限   <uses-permission android:name="android.permission.INTERNET"/>
Android Studio中的项目:导入library,并依赖

导入:点击File,New——>import Module 打开libray的位置,选中libray ,点击OK

依赖:点击Android studio工具栏中的有多个小方块的那个,再点击 app,再点击Dependencies,再点击+符号,再点击Module dependency,选中libray,点击OK,依赖成功

//布局文件
<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();
}
}
}
 

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

  1. Vue mint ui用在消息页面上拉加载下拉刷新loadmore 标记

    之前总结过一个页面存在多个下拉加载的处理方式,今天再来说一下在消息页面的上拉加载和下拉刷新,基本上每个app都会有消息页面,会遇到这个需求 需求:每次加载十条数据,上拉加载下拉刷新,并且没有点击查看过 ...

  2. 上拉加载下拉刷新控件WaterRefreshLoadMoreView

    上拉加载下拉刷新控件WaterRefreshLoadMoreView 效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on ...

  3. RecyclerView 上拉加载下拉刷新

    RecyclerView 上拉加载下拉刷新 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/teach_s ...

  4. APICloud上啦加载下拉刷新模块

    apicloud有自带的上啦加载下拉刷新,当让也可以用第三方或者在模块库里面找一个使用 一.下拉刷新,一下代码写在 apiready = function (){} 里面 apiready = fun ...

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

    微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载 ...

  6. mui scroll和上拉加载/下拉刷新

    mui中 scroll和上拉加载/下拉刷新同时存在会出现两个滚动条 把/*   */ /* //mui页面鼠标拖动代码: mui('.mui-scroll-wrapper').scroll({ dec ...

  7. SwipeRefreshLayout实现上拉加载下拉刷新

    package com.example.swiperefreshlayoutdemo; import java.util.ArrayList;import java.util.HashMap; imp ...

  8. MJRefresh(上拉加载下拉刷新)

    整理自:https://github.com/CoderMJLee/MJRefresh#%E6%94%AF%E6%8C%81%E5%93%AA%E4%BA%9B%E6%8E%A7%E4%BB%B6%E ...

  9. Flutter上拉加载下拉刷新---flutter_easyrefresh

    前言 Flutter默认不支持上拉加载,下拉刷新也仅仅支持Material的一种样式.Android开发使用过SmartRefreshLayout的小伙伴都知道这是一个强大的刷新UI库,集成了很多出色 ...

  10. 利用iscroll实现上拉加载下拉刷新

    1.首先引用isScroll插件 说明:页面加载时初始化isScroll,然后调用pullDownAction()和pullUpAction(),每次切换tab时,只需要对pullDownAction ...

随机推荐

  1. VC 中使用 CToolTipCtrl 消失后不再出现的Bug。。。。

    最近用WTL重写CGdipButton.从ButtonST中将CtoolTipCtrl的相关代码转过来,发现一个问题: ToolTip可以显示,鼠标移开后再移动到button上也可以再次显示,但是按下 ...

  2. nmon性能统计工具使用-初认识

    1.概述 监控,在检查系统问题或优化系统性能工作上是一个不可缺少的部分.通过操作系统监控工具监视操作系统资源的使用情况,间接地反映了各服务器程序的运行情况.根据运行结果分析可以帮助我们快速定位系统问题 ...

  3. UISwitch 开关控件

    UISwitch iOS中的开关控件,只有两种状态,打开或关闭. aSwitch.tintColor = [UIColor redColor]; //关闭状态下的渲染颜色 aSwitch.onTint ...

  4. submit提交表单后,不刷新当前页面

    <form method="get" target="test" action="a.html"> <input type ...

  5. BP神经网络代码

    close allclear allclcload x.txt; load y.txt; inputs = x';targets = y; % 创建一个模式识别网络(两层BP网络),同时给出中间层神经 ...

  6. python脚本文件删除

    昨天有需求需要用python脚本删除一个目录下的文件.遇到了点麻烦. 使用的是shutil.rmtree(dir)函数,这个函数可以删除有内容的目录,而shutil.rmdir(dir)只能删除空目录 ...

  7. 2. Shell 传递参数

    1. 概要 我们可以在执行 Shell脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推-- #!/bin/bas ...

  8. HTML+CSS Day10实例

    1.家居大视野 效果图: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  9. javascript中函数的call,apply及bind方法

    call 方法调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[,  [,.argN]]]]])参数thisObj可选项.将被用作当前对象的对象. ...

  10. android性能调优之traceview的使用

    1.在开始使用TraceView你要注意: 你的设备和模拟器必须设置SD card 和 你的程序拥有对SD card 具有读写操作的权限( <uses-permission android:na ...