主界面↓

 package com.wangzhen.pulltorefresh;

 import java.util.ArrayList;
import java.util.List; import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ContentView;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.wangzhen.adapter.MessageAdapter;
import com.wangzhen.bean.NewsBean;
import com.wangzhen.listener.HttpDataListener;
import com.wangzhen.tasks.LoadNewsTask; import android.support.v7.app.ActionBarActivity;
import android.text.format.DateUtils;
import android.widget.ListView;
import android.content.Context;
import android.os.Bundle; @ContentView(R.layout.activity_main)
public class MainActivity extends ActionBarActivity { @ViewInject(R.id.ListView_PullToRefresh)
private PullToRefreshListView ListView_PullToRefresh; Context mContext;
MessageAdapter adapter;
private HttpDataListener mDataListener; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ViewUtils.inject(this);
mContext = this; Setup();
InitListener(); List<NewsBean> list = new ArrayList<NewsBean>();
for (int i = 0; i < 5; i++) {
NewsBean bean = new NewsBean();
bean.setNewsImageURL("");
bean.setNewsTitle("标题" + (i + 1));
bean.setNewsContent("内容" + (i + 1));
list.add(bean);
}
adapter = new MessageAdapter(mContext, list);
ListView_PullToRefresh.setAdapter(adapter); ListView_PullToRefresh
.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override
public void onRefresh(
PullToRefreshBase<ListView> refreshView) {
String time = DateUtils.formatDateTime(mContext,
System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME
| DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_ABBREV_ALL); // 下拉刷新
if (refreshView.isShownHeader()) {
// 设置刷新标签
ListView_PullToRefresh.getLoadingLayoutProxy()
.setRefreshingLabel("正在刷新");
// 设置刷新标签
ListView_PullToRefresh.getLoadingLayoutProxy()
.setPullLabel("下拉刷新");
// 设置刷新标签
ListView_PullToRefresh.getLoadingLayoutProxy()
.setReleaseLabel("释放开始刷新");
// 设置上一次刷新的提示标签
refreshView.getLoadingLayoutProxy()
.setLastUpdatedLabel("最后更新时间:" + time);
}
// 上拉加载
if (refreshView.isShownFooter()) {
// 设置刷新标签
ListView_PullToRefresh.getLoadingLayoutProxy()
.setRefreshingLabel("正在加载");
// 设置刷新标签
ListView_PullToRefresh.getLoadingLayoutProxy()
.setPullLabel("上拉加载更多");
// 设置刷新标签
ListView_PullToRefresh.getLoadingLayoutProxy()
.setReleaseLabel("释放开始加载");
// 设置上一次刷新的提示标签
refreshView.getLoadingLayoutProxy()
.setLastUpdatedLabel("最后加载时间:" + time);
}
new LoadNewsTask(ListView_PullToRefresh, mDataListener)
.execute();
}
});
} /**
* 初始化监听器
*/
private void InitListener() {
mDataListener = new HttpDataListener() { @Override
public void ParseResponse(List<NewsBean> list) {
if (list == null) {
return;
}
adapter.AddData(list);
adapter.notifyDataSetChanged();
}
};
} /**
* 对下拉刷新和上拉加载进行设置
*/
private void Setup() {
/**
* PullToRefresh刷新模式
* Both:上拉刷新和下拉刷新都支持
* DIABLED:禁用上拉下拉刷新
* PULL_FROM_START:仅支持下拉刷新
* PULL_FROM_END:仅支持上拉加载
* MANUAL_REFRESH_ONLY:只允许手动触发
*/
ListView_PullToRefresh.setMode(Mode.BOTH);
}
}

HTTP接口↓

 package com.wangzhen.listener;

 import java.util.List;

 import com.wangzhen.bean.NewsBean;

 /**
* HTTP请求接口
* @author Administrator
*
*/
public interface HttpDataListener { /***
* 解析服务器返回结果
*
* @param list
*/
public abstract void ParseResponse(List<NewsBean> list);
}

异步加载类↓

 package com.wangzhen.tasks;

 import java.util.ArrayList;
import java.util.List; import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.wangzhen.bean.NewsBean;
import com.wangzhen.listener.HttpDataListener; import android.os.AsyncTask; /**
* 异步加载新闻
*
* @author Administrator
*
*/
public class LoadNewsTask extends AsyncTask<String, Void, List<NewsBean>> { PullToRefreshListView mListView;
HttpDataListener mListener; public LoadNewsTask(PullToRefreshListView listView,
HttpDataListener listener) {
mListView = listView;
mListener = listener;
} @Override
protected void onPostExecute(List<NewsBean> result) {
super.onPostExecute(result);
mListView.onRefreshComplete();
mListener.ParseResponse(result);
} @Override
protected List<NewsBean> doInBackground(String... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return GenerateData();
} /**
* 生成数据
*
* @return
*/
private List<NewsBean> GenerateData() {
List<NewsBean> list = new ArrayList<NewsBean>();
for (int i = 0; i < 5; i++) {
NewsBean bean = new NewsBean();
bean.setNewsImageURL("");
bean.setNewsTitle("添加标题" + (i + 1));
bean.setNewsContent("添加内容" + (i + 1));
list.add(bean);
}
return list;
} }

消息适配器↓

 package com.wangzhen.adapter;

 import java.util.List;

 import com.wangzhen.bean.NewsBean;
import com.wangzhen.pulltorefresh.R; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; /**
* 新闻适配器
*
* @author Administrator
*
*/
public class MessageAdapter extends BaseAdapter { Context mContext;
LayoutInflater mInflater; List<NewsBean> mData = null; public MessageAdapter(Context context, List<NewsBean> list) {
mContext = context;
mInflater = LayoutInflater.from(mContext);
mData = list;
} /**
* 增加数据源
*
* @param data
*/
public void AddData(List<NewsBean> list) {
for (NewsBean bean : list) {
this.mData.add(bean);
}
} @Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
} @Override
public NewsBean getItem(int position) {
// TODO Auto-generated method stub
return mData.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item_layout, null);
holder.mImageView_Icon = (ImageView) convertView
.findViewById(R.id.ImageView_Icon);
holder.mTextView_Title = (TextView) convertView
.findViewById(R.id.TextView_Title);
holder.mTextView_Content = (TextView) convertView
.findViewById(R.id.TextView_Content);
convertView.setTag(holder); } else {
holder = (ViewHolder) convertView.getTag();
} holder.mImageView_Icon.setImageResource(R.drawable.ic_launcher);
holder.mTextView_Title.setText(mData.get(position).getNewsTitle());
holder.mTextView_Content.setText(mData.get(position).getNewsContent()); return convertView;
} class ViewHolder {
ImageView mImageView_Icon;
TextView mTextView_Title;
TextView mTextView_Content;
} }

实体类↓

 package com.wangzhen.bean;

 /**
* 实体类
*
* @author Administrator
*
*/
public class NewsBean { private String NewsImageURL;
private String NewsTitle;
private String NewsContent; public String getNewsImageURL() {
return NewsImageURL;
} public void setNewsImageURL(String newsImageURL) {
NewsImageURL = newsImageURL;
} public String getNewsTitle() {
return NewsTitle;
} public void setNewsTitle(String newsTitle) {
NewsTitle = newsTitle;
} public String getNewsContent() {
return NewsContent;
} public void setNewsContent(String newsContent) {
NewsContent = newsContent;
} }

在PullToRefreshBase文件里要添加以下代码:

 // 判别头部是否展示出来,如果展示出来代表下拉使得头部展示。true为下拉
public boolean isShownHeader() {
return getHeaderLayout().isShown();
} // 判别低部是否展示出来,如果展示出来代表上拉使得低部展示。true为上拉
public boolean isShownFooter() {
return getFooterLayout().isShown();
}

PullToRefresh的使用的更多相关文章

  1. android使用PullToRefresh实现上拉加载和下拉刷新效果

    其实很早前就在博客园中也写过官方的下拉刷新控件SwipeRefreshLayout,但是这个控件仅仅支持下拉刷新,用起来还算可以.然而在我们实际开发应用中,很多地方都不止有下拉刷新,而且还有上拉加载的 ...

  2. 使用PullToRefresh插件实现ListView下拉刷新(Android Studio)

    下载PullToRefresh

  3. 如何使用PullToRefresh

    这里有详解 PullToRefresh使用详解(一)--构建下拉刷新的listView PullToRefresh使用详解(二)---重写BaseAdapter实现复杂XML下拉刷新 PullToRe ...

  4. UWP Composition API - PullToRefresh

    背景: 之前用ScrollViewer 来做过 PullToRefresh的控件,在项目一些特殊的条件下总有一些问题,比如ScrollViewer不会及时到达指定位置.于是便有了使用Compositi ...

  5. .Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用

    下拉刷新很多地方都用到了,新浪微博,微信,百度新闻 这里我们使用一个开源的库叫:PullToRefresh 开源地址:https://github.com/chenyoca/pull-to-refre ...

  6. PullToRefresh

    PullToRefreshListView的使用,实现下拉刷新,上拉加载更多.首先是布局文件: <com.handmark.pulltorefresh.library.PullToRefresh ...

  7. 【转载】 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

    Android下拉刷新pullToRefreshListViewGridView 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/3 ...

  8. Android中pullToRefresh使用

    pullToRefresh的导入 首先,点击new按钮 -> import Module 然后在 New Module界面选择已经在本地的含有源代码的pullToRefresh. 打开如下图所示 ...

  9. ListView上拉加载,下拉刷新 PullToRefresh的使用

    PullToRefresh是一套实现非常好的下拉刷新库,它支持:ListViewExpandableListViewGridViewWebViewScrollViewHorizontalScrollV ...

  10. pulltorefresh滚动到底部

    如果用ListView,让它滚动到顶部,一般是这样写的: if (!listView.isStackFromBottom()) { listView.setStackFromBottom(true); ...

随机推荐

  1. [欢度国庆]为什么我们今天还要学习和使用C++?(转载)

    在各种新的开发语言层出不穷的今天,在Java和C#大行其道今天,我们为什么还要学习和使用C++?现在学习C++将来有用吗?学习C++要花费那么多时间和精力,这一切都值得吗?现在学习C++有钱途吗? 这 ...

  2. 转自:http://blog.sina.com.cn/s/blog_86e874d30101e3d8.html(谢谢原文作者),Win7下安装CentOS 6.5双系统

    经过一下午的折腾,终于在64位的Windows 7上面成功安装了CentOS 6.5(64bit)系统,中途因为硬盘分区的问题失败了一次.下面是安装过程: 在安装过程中借助了这篇文章的内容:http: ...

  3. centos 安装RAR

    根据系统的情况下载rarlinuxx64版本wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar.gzx86版本wget http://www.r ...

  4. UCOS 请求任务删除函数 及其应用

    有时候,如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失.在这种情况下,用户可以想法子让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己.用户 ...

  5. DotNET知识点总结五(笔记整合)

    1.委托:通常指的是 多播委托 通常的说,委托就是一个存放方法指针的容器,是一个安全的函数指针,供程序员安全调用.委托的本质就是一个类,继承于MulticastDelegate——>Delega ...

  6. JAVA三大框架SSH的各自作用

        一.Spring Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯. Spring的 ...

  7. iOS摄像头和相册-UIImagePickerController-浅析(转)

    iOS摄像头和相册-UIImagePickerController-浅析(转) 转自: http://blog.sina.com.cn/s/blog_7b9d64af0101cfd9.html 在一些 ...

  8. Windows下python安装matplotlib

    此文为转载,原文地址为:http://blog.csdn.net/u010585135/article/details/42127273 一.下载matplotlib安装包:网址http://matp ...

  9. 转:MFC中创建多线程

    MFC中创建多线程   MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问类的其他成员 ...

  10. XJOI网上同步测试DAY14 T1

    思路:线段树维护最短路 #include<cstdio> #include<cmath> #include<iostream> #include<algori ...