PullToRefresh的使用
主界面↓
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的使用的更多相关文章
- android使用PullToRefresh实现上拉加载和下拉刷新效果
其实很早前就在博客园中也写过官方的下拉刷新控件SwipeRefreshLayout,但是这个控件仅仅支持下拉刷新,用起来还算可以.然而在我们实际开发应用中,很多地方都不止有下拉刷新,而且还有上拉加载的 ...
- 使用PullToRefresh插件实现ListView下拉刷新(Android Studio)
下载PullToRefresh
- 如何使用PullToRefresh
这里有详解 PullToRefresh使用详解(一)--构建下拉刷新的listView PullToRefresh使用详解(二)---重写BaseAdapter实现复杂XML下拉刷新 PullToRe ...
- UWP Composition API - PullToRefresh
背景: 之前用ScrollViewer 来做过 PullToRefresh的控件,在项目一些特殊的条件下总有一些问题,比如ScrollViewer不会及时到达指定位置.于是便有了使用Compositi ...
- .Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用
下拉刷新很多地方都用到了,新浪微博,微信,百度新闻 这里我们使用一个开源的库叫:PullToRefresh 开源地址:https://github.com/chenyoca/pull-to-refre ...
- PullToRefresh
PullToRefreshListView的使用,实现下拉刷新,上拉加载更多.首先是布局文件: <com.handmark.pulltorefresh.library.PullToRefresh ...
- 【转载】 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
Android下拉刷新pullToRefreshListViewGridView 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/3 ...
- Android中pullToRefresh使用
pullToRefresh的导入 首先,点击new按钮 -> import Module 然后在 New Module界面选择已经在本地的含有源代码的pullToRefresh. 打开如下图所示 ...
- ListView上拉加载,下拉刷新 PullToRefresh的使用
PullToRefresh是一套实现非常好的下拉刷新库,它支持:ListViewExpandableListViewGridViewWebViewScrollViewHorizontalScrollV ...
- pulltorefresh滚动到底部
如果用ListView,让它滚动到顶部,一般是这样写的: if (!listView.isStackFromBottom()) { listView.setStackFromBottom(true); ...
随机推荐
- [转]Windows中的句柄(handle)
1.句柄是什么? 在windows中,句柄是和对象一一对应的32位无符号整数值.对象可以映射到唯一的句柄,句柄也可以映射到唯一的对象.2.为什么我们需要句柄? 更准确地说,是windows需要 ...
- Spring4.0学习笔记(4) —— 使用外部属性文件
1.配置xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt ...
- apache2.2 虚拟主机配置详解
一.修改httpd.conf 打开appserv的安装目录,找到httpd.conf文件,分别去掉下面两行文字前面的#号. #LoadModule vhost_alias_module modules ...
- cmd中用PING命令时,出现'Ping'不是内部或外部命令
在cmd中用PING命令时,出现'Ping' 不是内部或外部命令,也不是可运行的程序或批处理文件.先了解一下内容:1.可执行文件.命令文件和批处理文件以.exe或者.com或者.bat为扩展名的文件分 ...
- 三元运算和lambda表达式
19.三目运算,三元运算: if else 的简写: name = 'alex' if 1 == 1 else 'SB' ==> 等价于 if 1 == 1: ...
- Python文件处理之文件打开方式(一)
Python中打开一个文件是同过open函数来打开的,并返回一个文件对象,以下为open函数的参数: open(name[, mode[buf]]) name:文件路径 mode:打开方式 buf:缓 ...
- 避免Block的循环引用
避免Block的循环引用 什么是循环引用,什么时候发生循环引用 1 循环引用就是当self 拥有一个block的时候,在block 又调用self的方法.形成你中有我,我中有你,谁都无法将谁释放的困局 ...
- ossim
http://edu.51cto.com/index.php?do=lession&id=23039 http://www.tudou.com/home/ossim/item
- 认识Android
安卓的特点开放性平等性无界性方便性硬件的丰富性 Android操作系统之中,一共将体系结构划分为四层:应用层(Application).应用框架层(Application Framework).系统运 ...
- 如何实现室内Wi-Fi无线终端的精准定位
如何实现室内Wi-Fi无线终端的精准定位 如何实现室内Wi-Fi无线终端的精准定位 随着商圈020的兴起,室内定位技术的也如百花争艳般不断涌现.但随着室内Wi-Fi网的架设普及,基于Wi-Fi定位技术 ...