ListView抽象化

抽象化,虚拟话

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. }

来自为知笔记(Wiz)

时间: 2024-11-09 06:50:02

ListView抽象化的相关文章

整合大量开源库项目(六)ListView动画,Activity&quot;抽象化&quot;,顺便提一提”抽象类“And&quot;接口&quot;

转载请注明出处:王亟亟的大牛之路 昨天发了一个自己写的简单的诸如EditText一个自定义控件,不过貌似反响不太好,这里再推一推,希望大家给予意见和支持:http://blog.csdn.net/ddwhan0123/article/details/50235151 OK,言归正传,上一次添加了一个"个人开发:界面,希望把之后自己写的一些东西都加入里面,作为一个"大型Lib"使用,所以就简单的把内容和界面搭了一下,也大致区分了下栏目,这种展示性的还是以ListView为佳,上

Android 监听ListView、GridView滑动到底部

// 监听listview滚到最底部mIndexList.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { // 当不滚动时 case OnScrollListener.SCROLL_STATE_IDLE: // 判断滚动到底部 if (view.get

RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版

1 编写目的 预期读者: 有视频编辑开发经验或者无经验的,打算或者正在使用"锐动IOS版RDVECore"的相关工程师. iOS软件工程师. 产品经理. QA 2 名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1080x720,640x480等. 帧率:每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数. 码率: 数据传输时单位时间传送的数据位数,一般我们用的

C# 将Access中时间段条件查询的数据添加到ListView中

C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加Item. 首先,ListView的Item属性包括Items和SubItems.必须先实例化一个ListIteView对象.具体如下: ListViewItem listViewItem=new ListViewItem(); l

[ ObjectListView ] - ListView的增强控件 - 前言 (翻译)

********************************************************************************** 原  标 题: A Much Easier to Use ListView 原文地址: https://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView 翻       译: 于国栋 http://www.shannon.net.cn *********

Android ListView工作原理完全解析(转自 郭霖老师博客)

原文地址:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况.ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了. 另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到

360手机助手(二):侧拉栏drawerLayout+Tab+Viewpager+ListView+Pulltorefresh+imageloder

整个项目的框架在ContentPager,要熟悉这个类. 简介 完成侧拉栏的显示,侧拉首页对应的:首页+应用+游戏这3个 tab,包含的知识点有:请求数据 +pullTofresh + ImageLoader +轮播图 + listView 效果图: 侧拉栏的实现 V4包中的DrawerLayout实现侧拉效果,每个侧拉的item对应一个fragment,点击该item时,先把所有的fragment隐藏 + 文字设置未选中,然后才创建对应的fragment并显示 怎么实现侧拉栏的显示与隐藏? 点

ListView

一.ListView入门 1.定义ListView在布局中 2.定义ListView的数据适配器 3.实现baseAdapter的getCount方法和getView方法. 二.ListView的优化 1.缓存对象 //convertView 历史缓存对象 @Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv; if(convertView == null){ /

Android——ListView布局+适配器(三)

Android--ListView布局+适配器(三) package com.example.administrator.newstop; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import andro