Android PullToRefresh (GridView 下拉刷新上拉加载)
做这个需要自己去git hub上下载个pull-to-refresh 里面有个library为依赖包自己导到自己的项目中
(下载地址:https://github.com/chrisbanes/Android-PullToRefresh)
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <!-- The PullToRefreshGridView replaces a standard GridView widget. --> <com.handmark.pulltorefresh.library.PullToRefreshGridView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pull_refresh_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2"
ptr:ptrDrawable="@drawable/ic_launcher"
ptr:ptrMode="both" /> </LinearLayout>

我们添加了一个属性:ptr:ptrMode="both" ,意思:上拉和下拉都支持。
可选值为:disabled(禁用下拉刷新),pullFromStart(仅支持下拉刷新),pullFromEnd(仅支持上拉刷新),both(二者都支持),manualOnly(只允许手动触发)
gridview中item布局
gridview.xml

<?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" > <ImageView
android:id="@+id/image_src"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" /> <TextView
android:id="@+id/text_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/image_src"
android:text="TextView" /> </RelativeLayout>

MainActivity.java

package com.bawei.myxgridview; import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.util.Log;
import android.widget.BaseAdapter;
import android.widget.GridView; import com.bawei.vo.Good;
import com.bawei.vo.MyData; import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import com.handmark.pulltorefresh.library.PullToRefreshGridView; public class MainActivity extends Activity { private PullToRefreshGridView mPullRefreshListView;
// 网址
private String URL = "http://api.expoon.com/AppNews/getNewsList/type/1/p/";
List<MyData> list = new ArrayList<MyData>();
private BaseAdapter adapter;
int z = 10;
int p = 10; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 找控件
mPullRefreshListView = (PullToRefreshGridView) findViewById(R.id.pull_refresh_grid);
// 刚进入初次加载
new GetDataTask().execute(URL + z);
// 监听
mPullRefreshListView
.setOnRefreshListener(new OnRefreshListener2<GridView>() {
// 下拉刷新加载
@Override
public void onPullDownToRefresh(
PullToRefreshBase<GridView> refreshView) {
Log.e("TAG", "onPullDownToRefresh"); // Do work to
// 刷新时间
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);
// 页数
z = z - 1;
// AsyncTask异步交互加载数据
new GetDataTask().execute(URL + z);
} // 上拉加载跟多
@Override
public void onPullUpToRefresh(
PullToRefreshBase<GridView> refreshView) {
Log.e("TAG", "onPullUpToRefresh"); // Do work to refresh // 页数
p = p + 1;
// AsyncTask异步交互加载数据
new GetDataTask2().execute(URL + p);
}
});
} // 下拉刷新加载数据
private class GetDataTask extends AsyncTask<String, Integer, String> { private String s; @Override
protected String doInBackground(String... params) { String url = params[0];
// 请求数据
s = NetWorkUtil.loginCheck_Get_HttpClient(url); return s;
} @Override
protected void onPostExecute(String result) {
// 解析
Gson gson = new Gson(); Good good = gson.fromJson(result, Good.class);
List<MyData> data = good.getData(); list = data;
// 适配
adapter = new Adper(MainActivity.this, list);
mPullRefreshListView.setAdapter(adapter);
// 刷新适配器
adapter.notifyDataSetChanged();
// 关闭刷新下拉
mPullRefreshListView.onRefreshComplete(); }
} // 上拉加载更多
private class GetDataTask2 extends AsyncTask<String, Integer, String> { private String s; @Override
protected String doInBackground(String... params) { String url = params[0];
// 请求数据
s = NetWorkUtil.loginCheck_Get_HttpClient(url); return s;
} @Override
protected void onPostExecute(String result) {
// 解析
Gson gson = new Gson();
Good good = gson.fromJson(result, Good.class);
List<MyData> data = good.getData();
list.addAll(data);
// 刷新适配器
adapter.notifyDataSetChanged();
// Call onRefreshComplete when the list has been refreshed.
// 关闭上拉加载
mPullRefreshListView.onRefreshComplete();
}
}
}

请求数据NetWorkUtil.java

package com.bawei.myxgridview; import java.io.IOException; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils; public class NetWorkUtil { public static String loginCheck_Get_HttpClient(String url) {
// TODO Auto-generated method stub
String result = ""; HttpGet get = new HttpGet(url);//创建httpClient的get请求对象
//设置请求参数
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 5*1000);
HttpConnectionParams.setSoTimeout(params, 5*1000); HttpClient client = new DefaultHttpClient(params);//创建HttpClient对象 try {
HttpResponse res = client.execute(get);//执行请求,获得结果
if(res.getStatusLine().getStatusCode() == 200){
HttpEntity entity = res.getEntity();//获得相应结果,是一个HttpEntity对象
result = EntityUtils.toString(entity, "utf-8");//转换为字符串
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
} }

VO类 两个
Good.java

package com.bawei.vo;
import java.util.List;
public class Good {
private List<MyData> data;
public Good(List<MyData> data) {
super();
this.data = data;
}
@Override
public String toString() {
return "Good [data=" + data + "]";
}
public List<MyData> getData() {
return data;
}
public void setData(List<MyData> data) {
this.data = data;
}
public Good() {
super();
}
}

MyData.java

package com.bawei.vo;
public class MyData {
private String news;
private String news_summary;
private String news_title;
private String pic_url;
public String getNews() {
return news;
}
public void setNews(String news) {
this.news = news;
}
public String getNews_summary() {
return news_summary;
}
public void setNews_summary(String news_summary) {
this.news_summary = news_summary;
}
public String getNews_title() {
return news_title;
}
public void setNews_title(String news_title) {
this.news_title = news_title;
}
public String getPic_url() {
return pic_url;
}
public void setPic_url(String pic_url) {
this.pic_url = pic_url;
}
@Override
public String toString() {
return "MyData [news=" + news + ", news_summary=" + news_summary
+ ", news_title=" + news_title + ", pic_url=" + pic_url + "]";
}
public MyData(String news, String news_summary, String news_title,
String pic_url) {
super();
this.news = news;
this.news_summary = news_summary;
this.news_title = news_title;
this.pic_url = pic_url;
}
public MyData() {
super();
}
}

适配器 Adper.java

package com.bawei.myxgridview; import java.util.List; 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; import com.bawei.vo.MyData;
import com.lidroid.xutils.BitmapUtils; public class Adper extends BaseAdapter {
Context context;
List<MyData> list;
public Adper(Context context, List<MyData> list) {
// TODO Auto-generated constructor stub
this.context=context;
this.list=list;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int arg0, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
viewholder vh;
if(convertView==null){
convertView=LayoutInflater.from(context).inflate(R.layout.gridview, null);
vh=new viewholder();
vh.image=(ImageView) convertView.findViewById(R.id.image_src);
vh.title=(TextView) convertView.findViewById(R.id.text_title);
convertView.setTag(vh);
}else{
vh=(viewholder) convertView.getTag();
}
BitmapUtils bitmapUtils=new BitmapUtils(context);
bitmapUtils.display(vh.image,list.get(arg0).getPic_url());
vh.title.setText(list.get(arg0).getNews_title());
return convertView;
}
class viewholder{
ImageView image;
TextView title;
} }

Android PullToRefresh (GridView 下拉刷新上拉加载)的更多相关文章
- Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/de ...
- SwipeRefreshLayout实现下拉刷新上滑加载
1. 效果图 2.RefreshLayout.java package myapplication.com.myapplication; import android.content.Context; ...
- 移动端下拉刷新上拉加载-mescroll.js插件
最近无意间看到有这么一个上拉刷新下拉加载的插件 -- mescroll.js,个人感觉挺好用的,官网地址是:http://www.mescroll.com 然后我就看了一下文档,简单的写了一个小dem ...
- Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)
转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...
- 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载
title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...
- RecyclerView下拉刷新上拉加载(一)
listview下拉刷新上拉加载扩展(一) http://blog.csdn.net/baiyuliang2013/article/details/50252561 listview下拉刷新上拉加载扩 ...
- ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多
ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...
- JS+CSS实现的下拉刷新/上拉加载插件
闲来无事,写了一个当下比较常见的下拉刷新/上拉加载的jquery插件,代码记录在这里,有兴趣将代码写成插件与npm包可以留言. 体验地址:http://owenliang.github.io/pull ...
- ListView下拉刷新上拉加载更多实现
这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...
- RecyclerView下拉刷新上拉加载(三)—对Adapter的封装
RecyclerView下拉刷新上拉加载(一) http://blog.csdn.net/baiyuliang2013/article/details/51506036 RecyclerView下拉刷 ...
随机推荐
- css圆角边框
一.CSS3圆角的优点 传统的圆角生成方案,必须使用多张图片作为背景图案.CSS3的出现,使得我们再也不必浪费时间去制作这些图片了,而且还有其他多个优点: * 减少维护的工作量.图片文件的生成.更新. ...
- [LintCode] Segment Tree Build 建立线段树
The structure of Segment Tree is a binary tree which each node has two attributes start and end deno ...
- nodeType的返回
<p id="one" title="one_one">one_one_one</p> 1.用getElementById var o ...
- lua函数
一.函数 在lua中函数的调用方式和C语言基本相同. 如print(“hello world”), z=add(x+y).唯一的差别是,如果函数只有一个参数,并且该参数是字符串或者table构造器 ...
- Ajax Post 与 Get 实例
Ajax的POST实例,index.html <html> <head> <script type="text/javascript"> fun ...
- 怎么启动或停止mysql服务
在linux下, 启动mysql用 service mysql start 停止用 service mysql stop 在windows下, 启动用 net start mysql 停止 ...
- Web前端开发基础 第三课(与浏览者交互)
来自慕课网,整理 语法: <form method="传送方式" action="服务器文件"> 讲解: 1.<form> :<f ...
- myeclipse + tomcat 项目自动部署
在MyEclipse中设置项目的自动部署需要综合考虑两个方面: 1是MyEclipse本身,通过主菜单中project->auto ,另一个就是tomcat配置文件.配置文件包括 conf 下的 ...
- 【iCore3 双核心板】例程十三:SDIO实验——读取SD卡信息
实验指导书及代码包下载: http://pan.baidu.com/s/1hqM787E iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- php使用p3p实现cookies跨域设置 实现单点登录,全站登录
P3P Header is present: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC ...