Android初学之listView分批加载数据

来源:互联网 发布:网络游戏音乐视频 编辑:程序博客网 时间:2024/06/10 16:45

listView 分批加载数据,解决的是用户体验问题

复用历史缓存的view对象 converview   减少子孩子id查询的次数

1.改进查询方法,不是一次查询所有数据,而是分批次/分页查询

  

        /** * 查询部分黑名单号码 * @param offset从哪个位置开始获取数据 * @param maxnumber一次最多获取多少条数据 * @return */public List<BlackNumberInfo> findPart(int offset,int maxnumber){try{Thread.sleep(500);} catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}List<BlackNumberInfo> result = new ArrayList<BlackNumberInfo>();SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.rawQuery("select number,mode from blacknumber order by _id desc limit ? offset ?",new String[]{String.valueOf(maxnumber),String.valueOf(offset)});while(cursor.moveToNext()){BlackNumberInfo info = new BlackNumberInfo();String number = cursor.getString(0);String mode = cursor.getString(1);info.setNumber(number);info.setMode(mode);result.add(info);}cursor.close();db.close();return result;}

2.


private int offset=0;private int maxnumber=20;

@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_call_sms_safe);ll_loading = (LinearLayout) findViewById(R.id.ll_loading);lv_callsms_safe = (ListView) findViewById(R.id.lv_callsms_safe);dao=new BlackNumberDao(this);fillDate();//listview 注册一个滚动事件 的监听器.lv_callsms_safe.setOnScrollListener(new OnScrollListener(){//当滚动的状态发生变化的时候@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState){switch (scrollState){case OnScrollListener.SCROLL_STATE_IDLE://空闲状态System.out.println("空闲状态");//判断当前listView滚动的位置//获取最后一个可见条目在集合里的位置。int lastPosition=lv_callsms_safe.getLastVisiblePosition();//集合里面有20个Item 位置从0开始的最后一个条目的位置 19if(lastPosition == infos.size()-1){offset+=maxnumber;fillDate();}break;case OnScrollListener.SCROLL_STATE_FLING://手指触摸滚动System.out.println("手指触摸滚动");break;case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://惯性滑行状态System.out.println("惯性滑行状态");break;}}//滚动的时候调用的方法@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount){}});}

3.抽取出fillData方法

private void fillDate(){ll_loading.setVisibility(View.VISIBLE);new Thread(){public void run() {if(infos==null){infos = dao.findPart(offset, maxnumber);}else{//原来已经加载过数据了infos.addAll(dao.findPart(offset, maxnumber));}runOnUiThread(new Runnable(){@Overridepublic void run(){ll_loading.setVisibility(View.INVISIBLE);if(adapter ==null){adapter = new CallSmsSafeAdapter();lv_callsms_safe.setAdapter(adapter);}else {adapter.notifyDataSetChanged();}}});};}.start();}

4.显示效果


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脸上长疙瘩很痒怎么办 一个多月宝宝脸上有湿疹怎么办 脸上发红发痒起疙瘩怎么办 脸过敏了怎么办最简单 胸下垂应该怎么办19岁 身上的肉特别松怎么办 才30岁脸部松弛怎么办 脸上的皮肤很松怎么办 面部皮肤干燥起皮刺痛怎么办 脸上的皮肤很粗糙怎么办 脸上又红又痒怎么办 鲜红斑痣增生了怎么办 激光祛斑后色素沉着怎么办 白球鞋洗后发黄怎么办 夏天出汗妆花了怎么办 买的小产权房怎么办 嘴唇起皮怎么办小妙招 照相嘴巴是歪的怎么办 鼻子笑起来很宽怎么办 财运不好怎么办最近你有偏财 从小缺爱的人怎么办 一到晚上就怕死怎么办 碰到不讲理的人怎么办 遇到不讲理的人怎么办 蚰蜓虫子咬了怎么办 腰肌损伤怎么办恢复快 腰闪了怎么办最有效 墨兰严重烂根怎么办 铁兰花变绿了怎么办 1岁半宝宝吵瞌睡怎么办 28天宝宝吵瞌睡怎么办 2个月宝宝闹瞌睡怎么办 被刺猬的刺扎了怎么办 买电脑被坑了怎么办 买电脑被坑了怎么办啊 在电脑城被坑了怎么办 小狗20天不睁眼怎么办 金星秀停播沈南怎么办 干了活拿不到钱怎么办 干完活要不到钱怎么办 让蚊子咬了很痒怎么办