Android自定义ListView实现分页加载
2015-09-07 15:40
423 查看
用到分页加载一般在ListView滑动中,思路如下:
1.自定义ListView,并实现OnScrollListener接口
2.在构造函数中,listview添加footerView,绑定滚动监听
3.设一个回调接口,到时候让Activity实现这个接口
4.设置一个公共方法,表示完成了加载,让footerView不可见
具体的完整的自定义ListView代码在下面
1.自定义ListView,并实现OnScrollListener接口
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) { //当第一个可见Item的位置 + 可见Item的数量 == 所有Item数量时 if(firstVisibleItem + visibleItemCount == totalItemCount){ //1.显示footerView //2.调用接口通知Activity加载数据 } }
2.在构造函数中,listview添加footerView,绑定滚动监听
public LoadListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(context); } private void initView(Context context) { footerView = LayoutInflater.from(context).inflate( R.layout.listview_footer, null); footerView.findViewById(R.id.load_layout).setVisibility(View.INVISIBLE); this.addFooterView(footerView); this.setOnScrollListener(this); this.setDividerHeight(dividerHeight); }
3.设一个回调接口,到时候让Activity实现这个接口
// 接口回调 public interface ListViewOnLoaderListener { void onLoad(); } public void setListViewOnLoaderListener( ListViewOnLoaderListener loaderListener) { this.loaderListener = loaderListener; }
4.设置一个公共方法,表示完成了加载,让footerView不可见
/** * 加载完毕 */ public void loadComplete() { isLoad = false; footerView.findViewById(R.id.load_layout).setVisibility(View.INVISIBLE); }
具体的完整的自定义ListView代码在下面
package com.king.mircosoftband.view;
import com.king.mircosoftband.R;
import com.king.mircosoftband.util.DisplayUtil;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
public class LoadListView extends ListView implements OnScrollListener {
private boolean isLoad = false;
private ListViewOnLoaderListener loaderListener;
private View footerView;
private int totalItemCount;// 总数量;
private int lastVisibleItem;// 最后一个可见的item;
private int dividerHeight = DisplayUtil.dip2px(getContext(), 8);
public LoadListView(Context context) {
this(context, null);
}
public LoadListView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public LoadListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(context); } private void initView(Context context) { footerView = LayoutInflater.from(context).inflate( R.layout.listview_footer, null); footerView.findViewById(R.id.load_layout).setVisibility(View.INVISIBLE); this.addFooterView(footerView); this.setOnScrollListener(this); this.setDividerHeight(dividerHeight); }
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
this.lastVisibleItem = firstVisibleItem + visibleItemCount;
this.totalItemCount = totalItemCount;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (lastVisibleItem == totalItemCount) {
if(!isLoad && loaderListener != null ){
isLoad = true;
footerView.findViewById(R.id.load_layout).setVisibility(View.VISIBLE);
loaderListener.onLoad();
}
}
}
/** * 加载完毕 */ public void loadComplete() { isLoad = false; footerView.findViewById(R.id.load_layout).setVisibility(View.INVISIBLE); }
// 接口回调
public interface ListViewOnLoaderListener {
void onLoad();
}
public void setListViewOnLoaderListener(
ListViewOnLoaderListener loaderListener) {
4000
this.loaderListener = loaderListener;
}
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories