广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    ListView 分页加载更新实例分享

    2018-04-03 22:30:09 次阅读 稿源:互联网
    广告
    ListView是android中最常用的控件之一。

    在实际运用中往往会遇到一次性加载全部数据过多,需要分页加载增加程序运行效率!
    本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 < count + 10; i++) {
    adapter.addItem(String.valueOf(i + 1));
    }
    }
    private void initAdapter() {
    // TODO Auto-generated method stub
    List<String> items = new ArrayList<String>();
    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<String> 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包哦! 这里就不提供下载了!

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告