Android ListView 分页加载

释放双眼,带上耳机,听听看~!

ListView是android中最常用的控件之一,以下是小编整理的一些ListView 分页加载的更新实例介绍,感兴趣的朋友跟小编一起来了解一下吧!

在实际运用中往往会遇到一次性加载全部数据过多,需要分页加载增加程序运行效率!

本demo是将更新的监听放在listview的foot中,通过底部按钮点击触发或者通过滑动事件监听,当滑动到列表最底部的时候触发。

有图有真像:

列表初始状态

触发加载

加载后

部分代码:

MainActivity

复制代码 代码如下:

 

private void initActivity() {

  // TODO Auto-generated method stub

  loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null);

  loadmore_btn = (Button) loadMoreView.findViewById(R.id.loadmore_btn);

  loadmore_btn.setOnClickListener(new OnClickListener() {

  @Override

  public void onClick(View v) {

  // TODO Auto-generated method stub

  doUpdate();

  }

  });

  listView = (ListView) findViewById(R.id.listView);

  listView.addFooterView(loadMoreView);

  initAdapter();

  listView.setAdapter(adapter);

  listView.setOnScrollListener(new OnScrollListener() {

  @Override

  public void onScrollStateChanged(AbsListView view, int scrollState) {

  // TODO Auto-generated method stub

  int itemsLastIndex = adapter.getCount() - 1;

  int lastIndex = itemsLastIndex + 1;

  if (scrollState == OnScrollListener.SCROLL_STATE_IDLE

  && visibleLast == lastIndex) {

  // 可在这添加滑到列表底的时候异步自动加载

  // doUpdate();

  }

  }

  @Override

  public void onScroll(AbsListView view, int firstVisibleItem,

  int visibleItemCount, int totalItemCount) {

  // TODO Auto-generated method stub

  visibleCount = visibleItemCount;

  visibleLast = firstVisibleItem + visibleItemCount - 1;

  }

  });

  }

  protected void doUpdate() {

  // TODO Auto-generated method stub

  loadmore_btn.setText("loading ...");

  handler.postDelayed(new Runnable() {

  @Override

  public void run() {

  // TODO Auto-generated method stub

  loadData();

  adapter.notifyDataSetChanged();// 通知adapter数据变化

  listView.setSelection(visibleLast - visibleCount + 1);

  loadmore_btn.setText("Load More");

  }

  }, 2000);

  }

  private void loadData() {

  // TODO Auto-generated method stub

  int count = adapter.getCount();

  for (int i = count; i

  adapter.addItem(String.valueOf(i + 1));

  }

  }

  private void initAdapter() {

  // TODO Auto-generated method stub

  List items = new ArrayList();

  for (int i = 0; i

  items.add(String.valueOf(i + 1));

  }

  adapter = new ListAdapter(this, items);

  }

  @Override

  public boolean onCreateOptionsMenu(Menu menu) {

  // Inflate the menu; this adds items to the action bar if it is present.

  getMenuInflater().inflate(R.menu.activity_main, menu);

  return true;

  }

 

ListAdapter

复制代码 代码如下:

 

 public ListAdapter(Context context, List items) {

  this.items = items;

  this.inflater = (LayoutInflater) context

  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  }

  @Override

  public int getCount() {

  // TODO Auto-generated method stub

  return items.size();

  }

  @Override

  public Object getItem(int position) {

  // TODO Auto-generated method stub

  return items.get(position);

  }

  @Override

  public long getItemId(int position) {

  // TODO Auto-generated method stub

  return position;

  }

  @Override

  public View getView(int position, View convertView, ViewGroup parent) {

  // TODO Auto-generated method stub

  if (convertView == null) {

  convertView = inflater.inflate(R.layout.list_item, null);

  }

  TextView textView = (TextView) convertView

  .findViewById(R.id.list_item_text);

  textView.setText(items.get(position));

  return convertView;

  }

  /**

  * 添加列表项

  * @param item

  */

  public void addItem(String item){

  items.add(item);

  }

 

提醒一下:要下载android-support-v4.jar 这个第三方的jar包哦! 这里就不提供下载了!

 

人已赞赏
Android文章

Android开发Watchdog正常工作的流程

2020-1-12 11:02:34

Android文章

Android双向链表插入删除基本应用

2020-1-12 11:49:23

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索