2020/2/14学习总结

今天继续学习ListView的知识

1.自定义适配器的改进

  1.1 ListView的工作原理:

ListView工作的时候,会针对每个item,要求Adapter对象返回一个View(getView()方法),也 就是说,Listview在开始绘制的时候,系统首先调用getCount(),根据其返回值得到ListView的长度,然后根据这个长度,调用 getView()一行一行的绘制ListView的每一项。    

   1.2 ListView的缓存机制:

(1)如果有几千,几万行甚至更多的代码的时候,其中只有课件的项存在于内存中,其他的都在Recycler中,Recycle是Android中专门用来处理缓存的组件。

(2)ListView先通过getView()方法请求一个View,然后请求其他可见的View。这时convertView在getView中是空的。

(3) 当列表第一项滚出屏幕,并且一个新的项从屏幕低端上来时,ListView会再请求一个View,这时,convertView已经不是空值了,它的值是 滚动出屏幕的第一项,之            后只需要设定新的数据,然后返回convertView即可,而不必重新创建一个View。

  1.3 ListView缓存实现

 public View getView(int position, View convertView, ViewGroup parent) {
               View view;
               /**对ListView的优化,convertView为空时,创建一个新视图;
                * convertView不为空时,代表它是滚出,
                * 放入Recycler中的视图,若需要用到其他layout,
                * 则用inflate(),同一视图,用fiindViewBy()
                * **/
               if (convertView == null) {
                   LayoutInflater inflater = OneActivity.this.getLayoutInflater();
                   view = inflater.inflate(R.layout.iteam, null);
                   //view = View.inflate(getBaseContext(),R.layout.item,null);
               } else {
                   view = convertView;
               }
               costBeen costBeen = mcostBeenList.get(position);
               TextView money = (TextView)view.findViewById(R.id.text1);
               TextView beizhu = (TextView)view.findViewById(R.id.text2);
               TextView data = (TextView)view.findViewById(R.id.text3);

               money.setText(String.valueOf(costBeen.getMoney()));
               beizhu.setText(costBeen.getBeizhu());
               data.setText(costBeen.getData());
                       return view;
           }
           

  1.4关于findViewById()函数的多次使用的改进。每次重新加载View时,都会从当前位置重复执行此函数来加载要显示的内容,关于这一点的改进可以通过

1、创建内部类viewHolder

2、判断convertView是否为空

3、通过setTag方法将viewHolder与convertView建立关系绑定

补充:setTag()方法的作用:View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。

 public View getView(int position, View convertView, ViewGroup parent) {
               viewHolder view;
               /**对ListView的优化,convertView为空时,创建一个新视图;
                * convertView不为空时,代表它是滚出,
                * 放入Recycler中的视图,若需要用到其他layout,
                * 则用inflate(),同一视图,用fiindViewBy()
                * **/
               if (convertView == null) {
                   view=new viewHolder();
                   convertView= LayoutInflater.from(OneActivity.this).inflate(R.layout.iteam,parent,false);
                   view.money=(TextView)convertView.findViewById(R.id.text1);
                   view.beizhu = (TextView)convertView.findViewById(R.id.text2);
                   view.data = (TextView)convertView.findViewById(R.id.text3);
                   convertView.setTag(view);
               } else {
                  view=(viewHolder)convertView.getTag();
               }
               view.money.setText(Datas.get(i).getMoney());
               view.beizhu.setText(Datas.get(i).getBeizhu());
               view.data.setText(Datas.get(i).getData());
               return view;
           }
           class viewHolder{
               private TextView money;
               private TextView beizhu;
               private  TextView data;
           }

原文地址:https://www.cnblogs.com/wangzhaojun1670/p/12311092.html

时间: 2024-11-02 10:30:46

2020/2/14学习总结的相关文章

2020年前端学习体系与前端概述

前端学习目标 基础课程:HTML + CSS javaScript DOM BOM AJAX HTML5 + CSS3 应用课程:jQuery easyUI 移动端开发 响应式开发 PHP基础 H5UI bootstrap less/stylus 模板引擎 swiper iscroll select2 工程课程:ES5/6/7 git&GitHub nodeJS mongoDB mySQL webpack gulp babel VUE 微信小程序 REACT 学习前端所需要用到的工具 欲善其事必

2020年寒假学习进度第十天

今天主要学习了实验 7 Spark 机器学习库 MLlib 编程实践, 主要代码: import org.apache.spark.ml.feature.PCA import org.apache.spark.sql.Row import org.apache.spark.ml.linalg.{Vector,Vectors} import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator import org.apa

2020年小白学习web前端应该知道的学习路线

2020年是充满机遇与挑战的一年,这一年注定不平凡.随着5G商用.传统产业数字化转型加快,我们完全可以想象到互联网行业即将迎来自己的“高光时刻”,因此,现在学习web前端正当时. 那么,对于零基础小白而言,如何才能快速学习web前端呢?下面,小编就为大家分享web前端学习路线. 很多对于web前端工程师并不了解,先给大家介绍一下什么是web前端开发工程师.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/Flash等各种Web技术进行客户端产品的开发.完成客户端程

2020年度春季学习总结--第一周

日期:2020.02.23 博客期:157 星期日 其实吧,感觉状态不是很好,希望早点能够回到学校学习,在这里没有自习室的好氛围.那么,简单地评价一下这一周,我还是在主要攻克<崩溃大陆>的修改器,那个无限物品实在是太难做了,首先是我没有学过关于浮点数的汇编,更致命的是它的赋值代码是单独分离出来的,就相当于你使用的双精度不是 C 语言里的基础类型 double ,而是 Java 语言里的 Double 类!这个类有固定的赋值函数,所以我们使用 CE 找到修改的汇编代码的时候会发现好多 doubl

2020年度春季学习总结--第四周

日期:2020.03.15 博客期:166 星期日 我说过要提升我的博客质量,所以最近应该写的数量比较少.当然啊,这也不单单是这一个原因造成的. 这一星期我感觉有什么变化呢?我感觉自己成熟了不少,就跟换了一个人似的,像是被中年老大爷附体了!有一个特点就是看老师直播很精神(特别精神),但一到老师的录播视频就感觉自己很不想看!具体表现嘛,像是:1.看到自己会的一些知识都忍不住想 跳过 或者是 开1.5倍速.2.看录播视频的时候心根本就没有放到学习上.3.遇到比较难的问题在课上就想着课下再看,到了课下

2020年度春季学习总结--第五周

日期:2020.03.22 博客期:167 星期日 好了,我知道这三天又没好好学习,这是为什么呢?倒不是计划的问题,因为有了计划,现在看来我在学校和在家里的感觉其实感觉差不多了,大家知道我也是真的很努力的查资料,毕竟自己自学能力差这一点是真的很令我难受!我现在发现这种每天记录,也有可能造假的问题.比如有一项内容没做完,我也要写到记录上去,这是不行的!这一周的内容虽然看起来很多,但实际上内容很轻松的!所以我也是很发愁啊,要知道这一学期真的很重要啊!这一周最最严重的一个问题就是对软件过程管理 CMM

11.14学习总结

学习了html的一些常用标签 1.1html5里的视频标签 <video src="/i/movie.ogg"  width="320" height="240" controls="controls">不支持的提示</video> 熟悉列表 1.2音频标签 <audio src="/i/song.ogg" controls="controls">不支

7.8~7.14学习总结

本周主要做了假期学习的准备工作,安装好了eclipse以及环境配置,并找到了自学Java需要用到的资料.用在学习上大概15小时,时间主要用于对Java学习资料的大致浏览,了解Java基本知识. 下周正式开始Java的学习,同时学习HTML5的相关知识. 本周遇到问题主要是Java开发环境不会配置,耗费了大量的时间以及安装eclipse时官网全是英文,理解存在一些问题. 原文地址:https://www.cnblogs.com/wyppaa/p/11183242.html

2020寒假在家学习,抗击新型病毒!!!

1月30日 发现了一个非常有意思的博主,她好像也是学习前端的,她的博客不仅有学习体会,还有生活体会,日常感想等等,然后真的写了超级多超级多!!!我突然意识到如果可以像这样将自己的学习.生活记录下来,定时的翻看,也一定会有诸多感悟. 2月1日 今天和爸妈.姐姐弟弟一起上山,山路险阻,光是走一圈就已精疲力竭,但是走路的感觉真的是很爽呀,每天只能呆在家里抗击病毒,心情难免会郁闷.回到家后,从来不午睡的弟弟竟也破天荒睡了一个午觉,真是难得呀.接下来的一个星期我只能靠着5G流量坚强的生活下去QAQ,但我是