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

2020/2/14学习总结

时间:2020-02-15 13:17:58      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:view   列表   学习   class   实现   one   数据   ada   针对   

今天继续学习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;
           }

 

2020/2/14学习总结

标签:view   列表   学习   class   实现   one   数据   ada   针对   

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

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