Android中如何实现ListView的分页加载

上一篇我粗略的说了下实现ListView下拉刷新的主要步骤,接下来我就如何实现ListView的分页加载来说下主要实现步骤:

1.继承ListView,ListView有一个addFooterView的方法用来在ListView的底部添加一个view。

2.同样给ListView添加滚动监听事件。

3.通过OnScrollListener中的onScroll方法来判断ListView是否滑到了最底部。

4.同样通过回调接口来实现在Activity中加载数据。

5.通过OnScrollListener中的onScrollStateChanged方法来改变底部view的显示以及加载更多数据。

下面看代码:

public class ListViewFooterRefresh extends ListView implements OnScrollListener{

 private View footerView;
 private int firstVisibleItem;//第一个Item的位置
 private int visibleItemCount;//显示的Item数量
 private int totalItemCount;//显示的最后一个Item
 private int lastVisibleItem;
 private boolean isLoading;//是否正在加载
 private RefreshListener refreshListener;
 public ListViewFooterRefresh(Context context) {
  super(context);
  initView(context);
 }
 
 public ListViewFooterRefresh(Context context, AttributeSet attrs) {
  super(context, attrs);
  initView(context);
 }
 
 public ListViewFooterRefresh(Context context, AttributeSet attrs,
   int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  initView(context);
 }
 /**
  * 加载底部布局
  * @param context
  */
 private void initView(Context context){
  footerView = LayoutInflater.from(context).inflate(R.layout.footer_listview, null);
  footerView.findViewById(R.id.footer).setVisibility(View.GONE);
  this.addFooterView(footerView);
  this.setOnScrollListener(this);
 }
 /**
  * 滚动事件
  */
 @Override
 public void onScrollStateChanged(AbsListView view, int scrollState) {
  if(lastVisibleItem == totalItemCount && scrollState == SCROLL_STATE_IDLE){
   if(!isLoading){
    isLoading = true;
    //显示footer
    footerView.findViewById(R.id.footer).setVisibility(VISIBLE);
    //加载更多,刷新数据
    refreshListener.OnRefresh();
   }

  }
  
 }

 @Override
 public void onScroll(AbsListView view, int firstVisibleItem,
   int visibleItemCount, int totalItemCount) {
  // TODO Auto-generated method stub
  this.lastVisibleItem = firstVisibleItem + visibleItemCount;
  this.totalItemCount = totalItemCount;
  
 }
 
 /**
  * 设置回调接口
  * @param refreshListener
  */
 public void setInterface(RefreshListener refreshListener){
  this.refreshListener = refreshListener;
 }
 /**
  * 回调接口
  * @author 5027
  *
  */
 public interface RefreshListener{
  public void OnRefresh();
 }
 
 /**
  * 加载完成
  */
 public void refreshComplete(){
  footerView.findViewById(R.id.footer).setVisibility(View.GONE);
 }

}

//////////////////////////////////////////////////////Activity/////////////////////////////////////////////////////////////

@Override
 public void OnRefresh() {
  Handler handler = new Handler();
  handler.postDelayed(new Runnable(){
   @Override
   public void run() {
    //重新加载更多数据
    ArrayAdapter adapter = new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,new String[]{"小亮"});
    listViewFooterRefresh.setAdapter(adapter);
    //通知ListView刷新完毕
    listViewFooterRefresh.refreshComplete();
    
   }
  }, 2000);
  
 }



你可能感兴趣的:(android,ListView)