zoukankan      html  css  js  c++  java
  • 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;
               }
  • 相关阅读:
    JS/jquery实现鼠标控制页面元素显隐
    【干货】十分钟读懂浏览器渲染流程
    【干货分享】程序员常访问的国外技术交流网站汇总
    jquery源码分析(七)——事件模块 event(二)
    jquery源码分析(五)——Deferred 延迟对象
    对于BFC(block format context)理解
    前端开发神器之chrome 综述
    重新认识面向对象
    DOMContentLoaded 与onload区别以及使用
    HTML5本地存储——Web SQL Database与indexedDB
  • 原文地址:https://www.cnblogs.com/wangzhaojun1670/p/12311092.html
Copyright © 2011-2022 走看看