本文介绍了Android ListView实现上拉加载的示例代码,分享给大家,具体如下:
我们先分析一下如何实现列表视图上拉加载。
-
<李>当我们上拉的时候,会出现一个提示界面,即ListView的页脚布局。李>
<李> ListView要实现滚动,所以要监听ListView滚动事件,即alt=" Android ListView实现上拉加载的示例代码">
, <强>页脚加载时状态变化强>
定义一个如上图所示的页脚的XML文件footer_layout.xml
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt; RelativeLayout xmlns: android=" http://schemas.android.com/apk/res/android " xmlns:工具=" http://schemas.android.com/tools " android: layout_width=" match_parent " android: layout_height=" wrap_content " android: paddingBottom=" 10 dp” android: paddingTop=" 10 dp”比; LinearLayout & lt; android: id=癅 + id/布局” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_centerHorizontal=" true " android: layout_marginTop=" 10 dp” android:重力="中心" 面向android:=按怪薄北? & lt; TextView android: id=癅 + id/tv_tip” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android:文本="下拉可以刷新” android: textSize=" 12 sp "/比; & lt;/LinearLayout> & lt; ImageView android: id=癅 + id/img_arrow” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_marginRight=" 10 dp” android: layout_toLeftOf=癅 + id/布局” android: src=" https://www.yisu.com/zixun/@drawable pull_to_refresh_arrow "/比; & lt; ProgressBar android: id=癅 + id/进展” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_centerVertical=" true " android: layout_marginRight=" 10 dp” android: layout_toLeftOf=癅 + id/img_arrow” android:可见性="了" 工具:可见性=翱杉?祝辞 & lt;/RelativeLayout>
<强> 2,初始化布局强>
定义一个RefreshListView类继承ListView,重写构造函数,并将页脚添加到列表视图中。
公开课RefreshListView延伸ListView { 私人视图标题; 私人int headerHeight;//顶部布局高度 私人int firstVisibleItem;//当前第一个项目可见位置 私人浮动startY;//按下时开始的Y值 私人int scrollState;//当前滚动状态 私人视图页脚; 私人int footerHeight;//底部布局高度 私人lastY浮动; 私人布尔canLoadMoreEnabled;//是否允许加载更多 公共RefreshListView(上下文语境){ 超级(上下文); initView(上下文); } 公共RefreshListView(上下文语境,AttributeSet attrs) { 超级(上下文,attrs); initView(上下文); } 公共RefreshListView(上下文语境、AttributeSet attrs int defStyleAttr) { 超级(上下文、attrs defStyleAttr); initView(上下文); } 私人空间initView(上下文语境){ 头=LayoutInflater.from(上下文).inflate (R.layout.header_layout, null); 页脚=LayoutInflater.from(上下文).inflate (R.layout.footer_layout, null); measureView(头); measureView(页脚);//这里获取高度的时候需要先通知父布局头占用的空间 headerHeight=header.getMeasuredHeight (); footerHeight=footer.getMeasuredHeight (); topPadding (-headerHeight); bottomPadding (-footerHeight);//用于隐藏页脚 this.addHeaderView(头); this.addFooterView(页脚); this.setOnScrollListener(这个); }/* * *设置页脚布局的下边距 *以隐藏页脚 * @param topPadding */私人空间bottomPadding (int bottomPadding) { footer.getPaddingTop footer.setPadding (footer.getPaddingLeft () (), footer.getPaddingRight (), bottomPadding); footer.invalidate (); } }
<强> 3,实现上拉加载强>
给ListView设置监听
公共类RefreshListView扩展视图实现AbsListView。OnScrollListener { 私人int firstVisibleItem;//当前第一个项目可见位置 私人int scrollState;//当前滚动状态 私人空间initView(上下文语境){ 头=LayoutInflater.from(上下文).inflate (R.layout.header_layout, null); 页脚=LayoutInflater.from(上下文).inflate (R.layout.footer_layout, null); measureView(头); measureView(页脚);//这里获取高度的时候需要先通知父布局头占用的空间 headerHeight=header.getMeasuredHeight (); footerHeight=footer.getMeasuredHeight (); topPadding (-headerHeight); bottomPadding (-footerHeight); this.addHeaderView(头); this.addFooterView(页脚); this.setOnScrollListener(这个); } @Override 公共空间> 私人lastY浮动; 私有静态int状态;//当前状态 私人最终静态int没有=0;//正常状态 私人最终静态int拉=1;//下拉状态 私人最终静态int释放=2;//释放状态 私人最终静态int刷新=3;//正在刷新状态Android ListView实现上拉加载的示例代码