ListView上拉加载
1.创建上拉加载更多的footview
2.监听OnScrollListener
3.接口回调更新数据到ListView
LoadListView.java 代码:
package com.zmj.listviewload;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
public class LoadListView extends ListView implements OnScrollListener{
private View footHeader;//底部加载布局
private int lastVisiableItem;//屏幕下方可见item
private int totalItemCount;//总共的item
private ILoadListener iLoadListener;//接口回调监听对象
private boolean isLoading;//记录加载状态的变量
public LoadListView(Context context) {
super(context);
initView(context);
}
public LoadListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView(context);
}
public LoadListView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
/**
* 初始化加载布局
* @param context
*/
private void initView(Context context){
LayoutInflater inflater= LayoutInflater.from(context);
footHeader=inflater.inflate(R.layout.footer_layout, null);
this.addFooterView(footHeader);
this.setOnScrollListener(this);
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(totalItemCount==lastVisiableItem && scrollState == SCROLL_STATE_IDLE){
if(!isLoading){
isLoading=true;
footHeader.findViewById(R.id.load_layout).setVisibility(View.VISIBLE);//显示加载界面
//更新加载数据
iLoadListener.onLoad();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
this.lastVisiableItem=firstVisibleItem+visibleItemCount;//屏幕下方的item
this.totalItemCount=totalItemCount;
}
public void onLoadComplete(){
isLoading=false;
footHeader.findViewById(R.id.load_layout).setVisibility(View.GONE);//隐藏加载界面
}
public void setLoadInterface(ILoadListener iLoadListener){
this.iLoadListener=iLoadListener;
}
/**
* 设置接口回调更新加载数据
* @author zmj
*
*/
public interface ILoadListener{
public void onLoad();
}
}
MainActivity.java 代码:
package com.zmj.listviewload;
import java.util.ArrayList;
import com.zmj.listviewload.LoadListView.ILoadListener;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class MainActivity extends Activity implements ILoadListener {
private LoadListView listView;
private MyAdapter myAdapter;
private ArrayList<ApkEntity> apk_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(LoadListView)findViewById(R.id.listview);
//1.设置数据
setData();
//加载数据到视图
showList(apk_list);
}
private void setData(){
apk_list=new ArrayList<ApkEntity>();
for(int i=0;i<10;i++){
ApkEntity apkEntity=new ApkEntity();
apkEntity.setName("默认数据");
apkEntity.setDes("这是一个神奇的应用");
apkEntity.setInfo("50w应用");
apk_list.add(apkEntity);
}
}
private void setMoreData(){
for(int i=0;i<2;i++){
ApkEntity apkEntity=new ApkEntity();
apkEntity.setName("更多数据");
apkEntity.setDes("这是一个神奇的应用");
apkEntity.setInfo("应用");
apk_list.add(apkEntity);
}
}
private void showList(ArrayList<ApkEntity> apk_list) {
if (myAdapter == null) {
//2.新建适配器,加载数据源
myAdapter=new MyAdapter(this, apk_list);
listView.setLoadInterface(this);//接口回调传到监听对象
//3.视图(ListView)加载适配器
listView.setAdapter(myAdapter);
} else {
myAdapter.onDateChange(apk_list);
}
}
/**
* 加载刷新数据
*/
@Override
public void onLoad() {
Handler handler=new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
setMoreData();
showList(apk_list);
listView.onLoadComplete();
}
}, 2000);
}
}
ListView上拉加载刷新demo代码: http://pan.baidu.com/s/1pJ3ROnT
ListView下拉刷新和上拉加载demo代码:http://pan.baidu.com/s/1bnwOGFl