Android 分页组件
16lz
2021-01-23
如果你用过 新浪微薄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 及时为大家修复!
更多相关文章
- C语言函数以及函数的使用
- Android 数据通信
- android视图切换动画:ViewAnimator类及其子类
- Android获取 应用程序大小,数据大小,缓存大小
- 【Android】Android中的数据传递(2)
- android 调用draw(canvas) 函数自动退出
- 在android里保存数据的三种形式(Saving Data)
- 引用自定义资源需注意数据类型
- android常用数据库字段描述