您的位置:首页 > 其它

ListView加载更多的最简单实现方式

2016-08-26 16:44 204 查看
public class RefreshListView extends ListView implements AbsListView.OnScrollListener {
public RefreshListView(Context context) {
this(context,null);
}
public RefreshListView(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOnScrollListener(this);
TextView textView = new TextView(context);
textView.setGravity(Gravity.CENTER);
textView.setHeight(DensityUtils.dp2px(context,50));
textView.setText("加载更多中...");
this.addFooterView(textView);
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}

RefreshingCallback loadMore;
booleanisLoadingMore = false;
public void  setLoadMore(RefreshingCallback loadMore){
this.loadMore = loadMore;
}

public void notifyLoadMoreFinished(){
isLoadingMore = false;
}

public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// LogUtil.v("=onScroll======visibleItemCount:"+visibleItemCount+" firstVisibleItem:"+firstVisibleItem+" totalItemCount:"+totalItemCount);
if(firstVisibleItem+visibleItemCount==totalItemCount&&!isLoadingMore&&firstVisibleItem!=0){
if(loadMore!=null) {
isLoadingMore = true;
loadMore.startLoadMore();
}
}
}

public interface RefreshingCallback{
void startLoadMore();
}
}
需要注意的是:因为List加了个footer所以此处最后一个条目会返回null
@Overridepublic Object getItem(int position) {if(list.size()>position){return list.get(position);}return null; //Bug}
这里面还有一点需要自己注意:就是当没有网络的时候,此处会一直处于:
isLoadingMore = true; 状态。除非再次初始化。
建议:可以在网络请求失败后做通知ListView还原的处理
isLoadingMore = false;

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: