您的位置:首页 > 其它

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;
}


}

加载的布局有点不太美观,需要的自己去修改,在这里把我的布局贴出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: