如果你用过 新浪微薄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. C语言函数以及函数的使用
  2. Android 数据通信
  3. android视图切换动画:ViewAnimator类及其子类
  4. Android获取 应用程序大小,数据大小,缓存大小
  5. 【Android】Android中的数据传递(2)
  6. android 调用draw(canvas) 函数自动退出
  7. 在android里保存数据的三种形式(Saving Data)
  8. 引用自定义资源需注意数据类型
  9. android常用数据库字段描述

随机推荐

  1. Android 编译错误总结及收集
  2. android功耗相关资料
  3. Android MVP模式
  4. [置顶] android使用getItemViewType时出
  5. android TIF启动流程--转载
  6. 如何在Android studio 配置github
  7. [android]在eclipse中项目经常出现异常解
  8. android:exported 属性分析
  9. android camera 源码分析(基于应用)
  10. Android 升级 min sdk 到29 后报错Dex fi