ListView上拉刷新,数据的分批加载小demo

原创 2016年05月31日 20:43:52

编程思想:

(1).用假数据填充当前页面的listView
(2).用addFooterView方法,为listview加入一个ProgressBar用于显示数据异步加载
(3).重写onScroll方法,找出listview最后的位置
(4).重写onScrollStateChanged方法,处理数据.这里使用发消息给handler加载数据,是为了减少主线程负重,把数据的加载都运行在工作线程.

效果图:

这里写图片描述

代码实现:

private ListView listView;
    private View moreView; //加载更多页面

    private SimpleAdapter adapter;
    private ArrayList<HashMap<String, String>> listData;

    private int lastItem;
    private int count;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView)findViewById(R.id.listView);
        moreView = getLayoutInflater().inflate(R.layout.load, null);
        listData = new ArrayList<HashMap<String,String>>();

        prepareData(); //准备数据
        count = listData.size();

        adapter = new SimpleAdapter(this, listData,R.layout.item, 
                new String[]{"itemText"}, new int[]{R.id.itemText});

        listView.addFooterView(moreView); //添加底部view,一定要在setAdapter之前添加,否则会报错。

        listView.setAdapter(adapter); //设置adapter
        listView.setOnScrollListener(this); //设置listview的滚动事件
    }

    private void prepareData(){  //准备数据
        for(int i=0;i<10;i++){
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("itemText", "测试数据"+i);
            listData.add(map);
        }
    }

    private void loadMoreData(){ //加载更多数据
         count = adapter.getCount(); 
        for(int i=count;i<count+5;i++){
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("itemText", "测试数据"+i);
            listData.add(map);
        }
        count = listData.size();
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        //减1是因为上面加了个addFooterView
        lastItem = firstVisibleItem + visibleItemCount - 1;  

    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
        Log.i(TAG, "scrollState="+scrollState);
        //下拉到空闲是,且最后一个item的数等于数据的总数时,进行更新
        if(lastItem == count  && scrollState == this.SCROLL_STATE_IDLE){ 
            Log.i(TAG, "拉到最底部");
            moreView.setVisibility(view.VISIBLE);

            mHandler.sendEmptyMessage(0);

        }

    }
    //声明Handler
    private Handler mHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case 0:

                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                loadMoreData();  //加载更多数据,这里可以使用异步加载
                adapter.notifyDataSetChanged();
                moreView.setVisibility(View.GONE); 

                if(count > 30){
                    Toast.makeText(MainActivity.this, "木有更多数据!", 3000).show();
                    listView.removeFooterView(moreView); //移除底部视图
                }
                Log.i(TAG, "加载更多数据");
                break;

            }
        };
    };
版权声明:本文为博主原创文章,未经博主允许不得转载。

android中listview分批加载数据

布局文件
  • z83986976
  • z83986976
  • 2015年01月29日 19:57
  • 463

listView分批和分页加载数据

在Android应用程序中,有时候会向listView中加载很多数据,向listView中加载数据是一个耗时的过程,加载过多的数据用户停留在listView上,一直等待,给用户的体验特别不好,比如向服...
  • chenfengdejuanlian
  • chenfengdejuanlian
  • 2015年07月26日 13:42
  • 2145

Android控件_ListView优化[分批加载]

经常看到
  • bronze_boy
  • bronze_boy
  • 2014年04月25日 18:32
  • 767

Android之ListView下拉刷新和上拉加载实现详解(含源码Demo)

之前有一段时间没写博客了,忙课程设计用了一周,搞其他有的没的也浪费了很多时间.. 惭愧惭愧..这两天整理了一下listview的下拉刷新和上拉加载的使用方法,自己做了一遍以后感觉受益良多,也慢慢...
  • qq_22770457
  • qq_22770457
  • 2016年03月02日 11:50
  • 1298

ListView的分批加载和分页加载

分页加载
  • cuishiying
  • cuishiying
  • 2015年08月30日 02:57
  • 2067

Android ListView 实现分批加载

转载请注明出处: http://blog.csdn.net/like_program/article/details/52901492 ListView 想必大家都很熟悉了,当有大量数据需要显示时,通...
  • like_program
  • like_program
  • 2016年10月23日 14:09
  • 2326

Android中OnScrollListener的详解(Listview分批加载用到)

class MyScrollListener implements OnScrollListener {            @Override          public void...
  • cw2004100021124
  • cw2004100021124
  • 2014年09月10日 11:31
  • 274

安卓ListView 数据分批加载

这里用到了Handler 所以简单描述一下,如下代码是一个简单的案例,下篇再传一个具体的应用案例 一、Handler的定义:           主要接受子线程发送的数据, 并用此数据配合主线...
  • suofeng1234
  • suofeng1234
  • 2016年06月28日 17:19
  • 476

ListView上拉加载和下拉刷新多种实现方式

ListView上拉加载和下拉刷新多种实现方式该篇为ListView下拉刷新和上拉加载实现的各种方法大合集。可能在具体的细节逻辑上处理不太到位,但基本上完成逻辑的实现。细节方面,个人可以根据自己的需求...
  • lisdye2
  • lisdye2
  • 2016年05月19日 01:05
  • 21454

android Listview分批加载+自动加载(附源码下载)

直接上代码,代码有注释: public class TestForListviewActivity extends Activity implements OnScrollListener { ...
  • u011494050
  • u011494050
  • 2014年05月11日 01:05
  • 2597
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ListView上拉刷新,数据的分批加载小demo
举报原因:
原因补充:

(最多只允许输入30个字)