自定义上拉加载控件1---listview实现

本文介绍了一种在Android中实现上拉加载更多功能的方法。通过自定义ListView并结合进度条和提示文本,开发者可以轻松地为应用添加平滑的滚动体验。文章提供了完整的代码示例,并展示了如何设置回调以实现数据的动态加载。

效果图:刷新两三次之后就看到“没有更多数据”了(^__^) 耐心点等gif播放哦。

loadmore listview

demo下载:
自定义listview加载更多 - 下载频道 - youkuaiyun.com
http://download.youkuaiyun.com/detail/baidu_31093133/9824346

代码:


/**
 * Created by REd on 2017/2/25.
 * 上拉加载更多的listView
 */

public class LoadMoreListview extends ListView implements AbsListView.OnScrollListener {
    /**
     * 底部显示正在加载的页面
     */
    private View footerView = null;
    private ProgressBar footPro;
    private TextView footText;


    /**
     * 存储上下文
     */
    private Context context;
    /**
     * 上拉刷新的ListView的回调监听
     */
    private ScripRefreshListviewCallBack scripRefreshListviewCallBack;
    /**
     * 记录第一行Item的数值
     */
    private int firstVisibleItem;

    public LoadMoreListview(Context context) {
        super(context);
        this.context = context;
        initListView();
    }

    public LoadMoreListview(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        initListView();
    }

    /**
     * 初始化ListView
     */
    private void initListView() {
        // 为ListView设置滑动监听
        setOnScrollListener(this);
        // 去掉底部分割线
        setFooterDividersEnabled(false);
    }

    /**
     * 初始化话底部页面
     */
    public void initBottomView(int resId) {

        if (footerView == null) {
            footerView = LayoutInflater.from(this.context).inflate(
                    resId, null);
        }
        footPro = (ProgressBar) footerView.findViewById(R.id.foot_pro);
        footText = (TextView) footerView.findViewById(R.id.foot_tv);
        footPro.setVisibility(VISIBLE);
        footText.setVisibility(VISIBLE);
        addFooterView(footerView);
    }

    public void updateFootView() {
        footPro.setVisibility(GONE);
        footText.setText("没有更多数据了");
    }

    public void onScrollStateChanged(AbsListView view, int scrollState) {

        //当滑动到底部时
        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
                && firstVisibleItem != 0) {
            scripRefreshListviewCallBack.scrollBottomState();
        }
    }

    public void onScroll(AbsListView view, int firstVisibleItem,
                         int visibleItemCount, int totalItemCount) {
        this.firstVisibleItem = firstVisibleItem;

        if (footerView != null) {
            //判断可视Item是否能在当前页面完全显示
            if (visibleItemCount == totalItemCount) {
                // removeFooterView(footerView);
                footerView.setVisibility(View.GONE);//隐藏底部布局
            } else {
                // addFooterView(footerView);
                footerView.setVisibility(View.VISIBLE);//显示底部布局
            }
        }

    }

    public void setScripRefreshListviewCallBack(
            ScripRefreshListviewCallBack myPullUpListViewCallBack) {
        this.scripRefreshListviewCallBack = myPullUpListViewCallBack;
    }

    /**
     * 上拉刷新的ListView的回调监听
     *
     * @author xiejinxiong
     */
    public interface ScripRefreshListviewCallBack {
        void scrollBottomState();
    }

}

使用:

//传入自定义的加载数据的底布局
listview1.initBottomView(R.layout.foot_view);
//实现加载更多的回调
        listview1.setScripRefreshListviewCallBack(new LoadMoreListview.ScripRefreshListviewCallBack() {
            @Override
            public void scrollBottomState() {//一旦滑到底部就会触发加载更多
                Log.i("LHD", "scrollBottomState");
                if (beans.size() < 30) {
                    loadData();
                } else {//如果没有更多数据就调用updateFootView显示"没有更多数据"
                    listview1.updateFootView();
                }
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值