ListView常用操作

1、判断是否滑到最底部以判断加载下一页

首先ListView implements OnScrollListener

再覆写onScrollStateChanged

    public void onScrollStateChanged(AbsListView view, int scrollState) {

        /*
         * ListView.getCount()(实际上是 AdapterView.getCount()) 返回的是其
         * Adapter.getCount() 返回的值。也就是“所包含的 Item 总个数”。
         * ListView.getChildCount()(ViewGroup.getChildCount) 返回的是显示层面上的“所包含的子
         * View 个数”。
         * 
         * 二者有什么不同?当 ListView 中的 Item 比较少无需滚动即可全部显示时,二者是等价的;当 Item
         * 个数较多需要滚动才能浏览全部的话, getChildCount() < getCount() 其中 getChildCount()
         * 返回的是当前可见的 Item 个数。
         */
        // 当不滚动时
        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
            // 判断是否滚动到底部
            //getChildAt是把footview也算进去的,lastChild获得的是footview
            View lastChild = getChildAt(getChildCount() - 1);
            if (view.getLastVisiblePosition() == view.getCount() - 1&&getBottom()-lastChild.getBottom()<=lastChild.getHeight()) {
                // 这里是footview一旦被看到就执行,真正意义上的bottomend是把lastChild.getHeight()换成0
                xListener.onBottomEnd();
            }
        }
    }


2、判断Listview是否可以上滑,即此时应该在最顶部

    private void setIsAbleToPull() {
        // TODO Auto-generated method stub
        View firstChild = getChildAt(0);
        if (firstChild != null) {
            int firstVisiblePos = getFirstVisiblePosition();
            // 如果首个元素的上边缘,距离父布局值为0,就说明ListView滚动到了最顶部,此时应该允许下拉刷新
            if (firstVisiblePos == 0
                    && firstChild.getTop() == getResources().getDimension(
                            R.dimen.listview_top_padding)) {
                ableToPull = true;
            } else {
                ableToPull = false;
            }
        } else {
            // 如果ListView中没有元素,也应该允许下拉刷新
            ableToPull = true;
        }
    }

 

Done

posted @ 2015-03-13 11:54  行云有影  阅读(285)  评论(0编辑  收藏  举报