Android初学之listView分批加载数据
来源:互联网 发布:网络游戏音乐视频 编辑:程序博客网 时间:2024/05/05 02:10
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
- Android初学之listView分批加载数据
- ListView分批加载数据
- ListView分批加载数据
- android中listview分批加载数据
- Android:ListView数据的分批加载
- android listView 分批加载
- ListView的分批加载数据
- 安卓中listview分批加载数据
- Android ListView 实现分批加载
- listView分批和分页加载数据
- 安卓ListView 数据分批加载
- 安卓ListView 数据分批加载
- 32-listview分批加载
- ListView的分批加载
- android Listview分批加载+自动加载(附源码下载)
- 57ListView的分批和分页的加载数据
- ListView上拉刷新,数据的分批加载小demo
- ListView分批加载数据——标记总结
- PMP 读书笔记纲要1
- Linux之Makefile(静态模式)
- MapReduce原理与设计思想
- Spring学习笔记——基础知识
- C/C++ 中的assert()宏 断言机制 (转)
- Android初学之listView分批加载数据
- 下载文件代码
- 电信中4G "15G断网"和3G“20G断网”的区别
- 修改Eclipse为黑色主题
- 因子和阶乘
- vs中附加项中添加OPENGL头文件
- 构造函数的一个小问题
- Table View Cells With Varying Row Heights
- 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: