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下拉刷 ...
随机推荐
- python--range()函数
1: >>> range(10, 0, -1) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] >>> range(10) [0, 1, 2, 3, ...
- Oracle 部分函数使用说明
oracle有些函数可能我知道是什么作用,但是具体其实说不清楚,这里是我这几天看到的函数使用方法及说明,记录一下,以后看看 --1.replace('str',oldVal,newVal)替换功能方法 ...
- unity3d插件Daikon Forge GUI 中文教程6-高级控件richtextlabel的使用
3.5.richtextlabel文本 可以像Word文档一样编辑出多样的内容,图片,字体颜色大小下划线.超链接背景等等. Defaults: 默认字体 默认图集 Blank Texture :空白的 ...
- linux笔记四-------用户和组的管理
1.linux多用户.多任务操作系统 cat /etc/passwd //查看当前系统用户信息 cat /etc/group //查看当前系统组别信息 2.rbac:基于角色进行权限分配 用 ...
- Chrome开发,debug的使用方法。
怎样打开Chrome的开发者工具? 你可以直接在页面上点击右键,然后选择审查元素: 或者在Chrome的工具中找到: 或者,你直接记住这个快捷方式: Ctrl+Shift+I (或者Ctrl+Shif ...
- IOS第11天(2:UIPickerView自定义国旗选择)
国旗选择 #import "HMViewController.h" #import "HMFlag.h" #import "HMFlagView.h& ...
- MBR(Master Boot Record)主引导记录分析
root@ubuntu1404:/home/chen# fdisk -l /dev/sda1 Disk /dev/sda1: MB, bytes heads, sectors/track, cylin ...
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(可持久化Trie)
D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standa ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- 详解依赖注入(DI)和Ioc容器
简单的来说,关键技术就是:注册器模式. 场景需求 我们知道写一个类的时候,类本身是有个目的的,类里面有很多方法,每个方法搞定一些事情:我们叫这个类为主类. 另外这个主类会依赖一些其他类的帮忙,我们叫这 ...