Android 自定义控件基础-ListView的加载更多

  ListView加载更多与之前的下拉刷新实现的方式差不多,都是通过自定义控件来实现的,而且都是通过重写ListView来实现的。

1.foot布局

  foot布局当中有一个progressbar控件,在我们使用这个控件的时候,要注意一点:如果我们想要使用·父布局来限制progressbar的大小,如果progressbar的layout_width设置的是wrap_content的话,会发现父布局对progressbar的限制失效了,解决的办法就是,将layout_width设置为match_parent



    
    

2.将Foot布局加载到ListView中

  自定义ListView中的代码就非常的简单,最重要的是一个回调接口,供MainActivity来实现。

private View mFootView = null;
    private LayoutInflater mInflater = null;

    private int mTotalItemCount = 0;   // ListView的Item总数目
    private int mLastItemCount = 0;    //最后一个Item的位置
    private boolean mIsLoad = false;  //判断是否在加载
public ListViewLoadMore(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }
    private void initView(Context context)
    {
        mInflater = LayoutInflater.from(context);
        mFootView = mInflater.inflate(R.layout.foot_layout, null, false);
        mFootView.setVisibility(View.GONE);
        addFooterView(mFootView);
        setOnScrollListener(this);
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if(mLastItemCount == mTotalItemCount && scrollState == SCROLL_STATE_IDLE)
        {
            if(!mIsLoad)
            {
                mIsLoad = true;
                mFootView.setVisibility(View.VISIBLE);
                mListener.onLoad();
            }
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        mTotalItemCount = totalItemCount;
        mLastItemCount = firstVisibleItem + visibleItemCount;
    }
    public void setOnLoadListener(OnLoadListener listener)
    {
        mListener = listener;
    }
    public interface  OnLoadListener
    {
        public void onLoad();
    }
    public void loadComplete()
    {
        mIsLoad = false;
        mFootView.setVisibility(View.VISIBLE);
    }

你可能感兴趣的:(Android 自定义控件基础-ListView的加载更多)