如果你用过 新浪微薄Android客户端,或者其他Android电子市场,你会发现,他们的内容是不是滚不完,会根据网络进行下一页数据加载。好把,今天在这里我就和大家分享下我写的一个分页类,让大家以后写带分页界面越来越容易。

package com.ffly.demoimport java.util.List;import android.content.Context;import android.os.Handler;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;public class NduoaPageAdapter <T> extends BaseAdapter{private boolean mHasLeft = true;private int mPageSize;private List<T> mResult = null;private Context mContext = null;private LayoutInflater mInflater;private int mRes;private int mLoadingRes;private INduoaPageAdapter<T> mCallback;private int mStart=0;   //res 显示项视图的资源编号,loadingres就是等待中的项试图public NduoaPageAdapter(Context context,INduoaPageAdapter<T> callback,int pageSize,int res,int loadingRes){mContext = context;mInflater = LayoutInflater.from(mContext);mCallback = callback;mPageSize = pageSize;mRes = res;mLoadingRes = loadingRes;mHasLeft=true;}//必须初始化所需的数据public void setInitData(List<T> iniData){mResult = iniData;mStart+=iniData.size();                if(iniData.size()<mPageSize){mHasLeft = false;}}@Overridepublic int getCount() {return mHasLeft ? mResult.size() + 1 : mResult.size();}@Overridepublic Object getItem(int position) {return mResult.get(position);}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if(position == mResult.size()) {convertView = mInflater.inflate(mLoadingRes, parent, false);new Thread(){public void run() {List<T> tmps = mCallback.nextPage(mStart, mPageSize);if(tmps==null){mHasLeft = false;}else{if(tmps.size()<mPageSize){mHasLeft = false;}else{mHasLeft = true;}mResult.addAll(tmps);mStart+=tmps.size();}mHandler.sendEmptyMessage(1);};}.start();                     convertView.setTag(null); }else {if (convertView == null   || convertView.getTag()==null) {convertView = mInflater.inflate(mRes,parent, false);}return mCallback.getView(position, convertView, parent, mResult.get(position));}return convertView;}Handler mHandler = new Handler(){public void handleMessage(android.os.Message msg) {NduoaPageAdapter.this.notifyDataSetChanged();};};//这里只需要实现这2个接口,就可以保证分页了。第一个函数是当滚动到下一页是,回掉返回获取到的数据。第2个函数//用来自定义你每项的试图,这个我想不用多说了把。public interface INduoaPageAdapter<T>{public List<T> nextPage(int start,int size);public View getView(int position,View convertView,ViewGroup parent,T value);}}

发现出了点小bug 及时为大家修复!

更多相关文章

  1. Android启动流程分析(十二) SystemServer
  2. Android(安卓)数据通信
  3. 【收藏】android WebView总结
  4. Android(安卓)启动过程分析 (二)
  5. Android(安卓)UI学习 - Tab的学习和使用
  6. 创建SqliteDatabase
  7. Android(安卓)实现连接MySQL数据库并进行增删改查操作
  8. 深入理解Android卷II
  9. 初涉Android之ContentProvider

随机推荐

  1. android UI进阶之style和theme的使用
  2. 图文并茂的android之SpannableString
  3. 使用谷歌提供的支持库(Android)
  4. android之图像处理、缩放、修改图片、绘
  5. 在eclipse中查看android源码
  6. android设置Activity背景色为透明的3种方
  7. android Java开发设计模式及在android中
  8. Android中关于Volley的使用(一)加载图片
  9. Android 开发者的 Flutter(三) —— Flutte
  10. Android P 开发者预览版 · 操作指南