码迷,mamicode.com
首页 > 其他好文 > 详细

ListView抽象化

时间:2015-08-27 12:36:55      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

抽象化,虚拟话



getView(^^^^):在这里判断ViewHolder是否为空,进行初始化Holder,加载View,初始化view ,设置标记,若有复用,直接从标记中拿出来aaa;设置数据
class ViewHolder{
    //写listview中item布局里面的元素
}

嵌套checkbox

主要写重写两个方法




数据多的话,需要 listview 分批
修改数据库方法,加入参数(起始位置,和最大位置)
select num,mode from blacknumber order by _id desc  limit 14 offset 10   (注意这里的书写顺序不能颠倒,表示从第十个位置开始,输出14个元素)
select num,mode from blacknumber order by _id desc  limit ?offset ?   ,new String[]{String.valueOf(maxnumber),String.valueOf(offset) }
技术分享

也可以这么写(不标准)
技术分享


滚动事件的监听器  setOnScrollListener     (在空闲状态,惯性,手指触摸)
技术分享
获得最后一个数据的位置
int lastVisiblePosition = view.getLastVisiblePosition();
当移动到最后一个位置时,那么起始位置更新为第一次最大的位置,同理,递归


往回滚的时候,出现了旧的的数据不见了---》分批
需要判断, 若加载过数据 ,新数据要加在集合末尾   .addAll( )    )

但是一加载数据后界面又回到第一条,(适配器问题,加入判断,若适配器已经存在了,      需要更新适配器notifyDataSetChanged()  )

若存太多对象不能用分批技术(内存开销太大,每一个对象都是会占内存的),需要分页技术(新获得的数据替换旧的数据)



1.复用历史缓存的view对象 converview
2.减少子孩子id查询的次数   getTag
3.分批的加载数据            
4.分页的加载数据


















代码
  1. private class TaskManagerAdapter extends BaseAdapter {
  2. private static final String TAG = "TaskManagerAdapter";
  3. @Override
  4. public int getCount() {
  5. SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
  6. if (sp.getBoolean("showsystem", false)) {
  7. return userTaskInfos.size() + 1 + systemTaskInfos.size() + 1;
  8. }else{
  9. return userTaskInfos.size() + 1 ;
  10. }
  11. }
  12. @Override
  13. public View getView(int position, View convertView, ViewGroup parent) {
  14. TaskInfo taskInfo;
  15. if (position == 0) {// 用户进程的标签
  16. TextView tv = new TextView(getApplicationContext());
  17. tv.setBackgroundColor(Color.GRAY);
  18. tv.setTextColor(Color.WHITE);
  19. tv.setText("用户进程:" + userTaskInfos.size() + "个");
  20. return tv;
  21. } else if (position == (userTaskInfos.size() + 1)) {
  22. TextView tv = new TextView(getApplicationContext());
  23. tv.setBackgroundColor(Color.GRAY);
  24. tv.setTextColor(Color.WHITE);
  25. tv.setText("系统进程:" + systemTaskInfos.size() + "个");
  26. return tv;
  27. } else if (position <= userTaskInfos.size()) {
  28. taskInfo = userTaskInfos.get(position - 1);
  29. } else {
  30. taskInfo = systemTaskInfos.get(position - 1
  31. - userTaskInfos.size() - 1);
  32. }
  33. View view;
  34. ViewHolder holder;
  35. if (convertView != null && convertView instanceof RelativeLayout) {
  36. view = convertView;
  37. holder = (ViewHolder) view.getTag();
  38. Log.i(TAG, "复用缓存。。" + position);
  39. } else {
  40. view = View.inflate(getApplicationContext(),
  41. R.layout.list_item_taskinfo, null);
  42. holder = new ViewHolder();
  43. holder.iv_icon = (ImageView) view
  44. .findViewById(R.id.iv_task_icon);
  45. holder.tv_name = (TextView) view
  46. .findViewById(R.id.tv_task_name);
  47. holder.tv_memsize = (TextView) view
  48. .findViewById(R.id.tv_task_memsize);
  49. holder.cb_status = (CheckBox) view.findViewById(R.id.cb_status);
  50. view.setTag(holder);
  51. Log.i(TAG, "创建新的view对象" + position);
  52. }
  53. holder.iv_icon.setImageDrawable(taskInfo.getIcon());
  54. holder.tv_name.setText(taskInfo.getName());
  55. holder.tv_memsize.setText("内存占用:"
  56. + Formatter.formatFileSize(getApplicationContext(),
  57. taskInfo.getMemsize()));
  58. holder.cb_status.setChecked(taskInfo.isChecked());
  59. if (getPackageName().equals(taskInfo.getPackname())) {
  60. holder.cb_status.setVisibility(View.INVISIBLE);
  61. } else {
  62. holder.cb_status.setVisibility(View.VISIBLE);
  63. }
  64. return view;
  65. }
  66. @Override
  67. public Object getItem(int position) {
  68. return null;
  69. }
  70. @Override
  71. public long getItemId(int position) {
  72. return 0;
  73. }
  74. }
  75. static class ViewHolder {
  76. ImageView iv_icon;
  77. TextView tv_name;
  78. TextView tv_memsize;
  79. CheckBox cb_status;
  80. }





ListView抽象化

标签:

原文地址:http://www.cnblogs.com/linmbbest/p/4762760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!