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

来源:互联网 发布:火狐淘宝无法登陆 编辑:程序博客网 时间:2024/06/05 02:43
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;    boolean isLoadingMore = 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;
0 0
原创粉丝点击