android listview分页加载 下载,ListView 分页加载更新实例分享

ListView是android中最常用的控件之一。

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

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

有图有真像:

列表初始状态

9c63d7a0ac9593c3232c2d996ac2bfb1.png 

触发加载

4dead762480021c19325e3915122e2ee.png 

加载后

0ff4d09f723ba3f40e05636ababf2060.png 

部分代码:

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 < count + 10; i++) {

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

}

}

private void initAdapter() {

// TODO Auto-generated method stub

List items = new ArrayList();

for (int i = 0; i < 10; 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包哦! 这里就不提供下载了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值