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下拉刷 ...
随机推荐
- HTML 插入视频
HTML 5 video 视频标签全属性详解 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.C ...
- 演示一个VPD进行数据访问控制的示例
1.确认数据库版本 2.环境准备 创建一张顾客表(customer),其中包括了顾客姓名,年龄,姓名,地址,收入等, 我们需要使用LIVAN用户只能查看收入为2000元以下的顾客信息. 3.实验控制策 ...
- vbox下Oracle Enterprise liunx5.4虚拟机安装10G RAC实验(一)
1.配置第一个虚拟机 1.1 安装后的登录界面 1.2 第1台机器(单数据配置方面) 1.2.1 验证安装包 1.2.2 修改内核参数 1.2.3添加安全限制 1.2.4关闭防火墙 1.2.5添加用户 ...
- Jedis工具类
1.RedisCache.java package cn.itcast.mybatis.dao; import java.util.Date;import java.util.HashMap;impo ...
- unicode可以通过编码(encode)成为特定编码的str
1.原始字符串python中的原始字符串以r开头,使用原始字符串可以避免字符串中转义字符带来的问题,例如写路径时 path = 'c:\noway',此时用 print path,其结果为:c:owa ...
- 累积进度图及本周PSP饼状图
每周进度 项目:词频统计 项目类型:个人项目 项目完成情况:已完成 C类别 C内容 S开始时间 E结束时间 I间隔 T净时间 分析 需求,设计 10:00 10:49 20 29 编码 代码的实 ...
- C# 常用类
一.Convert 主要用于数据类型的转换,常用的静态方法有: Convert.ToSingle():把数据转换为单精度浮点数,参数常为字符串 Convert.ToDouble():转为双精度浮点数 ...
- fight
为啥用block copy. 从栈到拷贝到堆 循环引用,控制器引用block. block里面调用 self self引用控件,控件引用block,block里面引用self http://www. ...
- Masonry学习分享
不完整目录 •UIScrollView 应用Masonry的正确用法 •tableHeaderView使用Masonry •同向文字显示优先级 1.基础篇 1.1基础使用 1.1.1运行效果 1.1. ...
- php插件开发
新建config.m4 PHP_ARG_ENABLE(walu, [Whether to enable the "walu" extension], [ enable-waluEn ...