PullToLoadListView的简单实现(api17以下包括17和api17以上有区别)
2016-07-02 18:01
411 查看
有些时候我们用到的原生的ListView需要增加上拉加载功能,而网上的许多PullToRefreshListView非常大,在这里我自己写了一个简单的上拉加载的ListView, 分享给大家,在这里就直接贴出代码,注意,api17和api17以上是有区别的,我在代码注释是非常详细的.注意,注释了的是api17以上的 package com.cnziz.traditionalpay.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.cnziz.traditionalpay.R;
public class PullToLoadListView extends ListView implements OnScrollListener,
OnClickListener {
private Context context;
private View footView;
private OnRefreshListener mRefreshListener;
private TextView btn_click_load_more;
private LinearLayout progress_layout;
private int page = 2;
private boolean is_divPage = false;
private int footerViewHeight; // 脚布局的高度
public static interface OnRefreshListener { public void onRefresh(int page); } public PullToLoadListView(Context context) { super(context); this.context = context; initView(); } public PullToLoadListView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; initView(); } public PullToLoadListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; initView(); } private void initView() { // TODO Auto-generated method stub setOnScrollListener(this); footView = View.inflate(context, R.layout.list_foot_layout, null); footView.measure(0, 0); footerViewHeight = footView.getMeasuredHeight(); //footView.setPadding(0, -footerViewHeight, 0, 0); //api17+ footView.setVisibility(View.GONE); btn_click_load_more = (TextView) footView .findViewById(R.id.btn_click_load_more); progress_layout = (LinearLayout) footView .findViewById(R.id.progress_layout); btn_click_load_more.setOnClickListener(this); addFooterView(footView); } public void setOnRefreshListener(OnRefreshListener onRefreshListener) { this.mRefreshListener = onRefreshListener; } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub if (is_divPage && scrollState == OnScrollListener.SCROLL_STATE_IDLE) { if (null != footView) { footView.setVisibility(View.VISIBLE); //footView.setPadding(0, 0, 0, 0); //api17+ btn_click_load_more.setVisibility(View.VISIBLE); progress_layout.setVisibility(View.GONE); } } else { if (null != footView) { footView.setV 85a2 isibility(View.GONE); //footView.setPadding(0, -footerViewHeight, 0, 0); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub is_divPage = (firstVisibleItem + visibleItemCount == totalItemCount); } @Override public void onClick(View v) { // TODO Auto-generated method stub mRefreshListener.onRefresh(page); btn_click_load_more.setVisibility(View.GONE); progress_layout.setVisibility(View.VISIBLE); } public void onLoadComplete() { page++; footView.setVisibility(View.GONE); //footView.setPadding(0, -footerViewHeight, 0, 0);//api17+ } public void clearPage() { page = 1; }
}
加载的布局有点不太美观,需要的自己去修改,在这里把我的布局贴出来
相关文章推荐
- 使用 Apache HttpClient
- 多线程的一些基础知识
- MongoDB的聚合框架Aggregation Framework入门学习教程
- Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
- spark 编译命令
- 闲话Linux系统安全(一)——自主访问控制(DAC) 推荐
- isc-dhcp-server
- 面向对象的架构设计
- 在宇宙间不易被风吹散 —— 天文学名词
- POJ3683 Falsita
- Spring Log4j2 log4j2.xml
- Gitosis管理(权限管理建议使用这种方法)
- 第四章 Hello,Shaders
- Linux 安装 JDK1.7.0_79
- Laravel 5.1 使用短信验证码插件laravel-sms
- Microsoft Azure Java Usage Demo
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
- Executors
- 策略模式