温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ListView的优化

发布时间:2020-07-03 14:38:33 来源:网络 阅读:386 作者:小诚诚cc 栏目:开发技术

1、  复用行布局(用已经完全消失的布局对象去替代即将出现的那个布局对象)

在自定义MyAdapter(继承BaseAdapter)适配器时,需重写getVIew(int position, View convertView, ViewGroup parent)方法,其中的converView方法会保存那个已经完全消失的布局对象因此我们用convertView来替代即将要创建的inflate

         (判断convertView为空时创建布局文件,不为空时直接用convertView来替代)

实现代码:

     View inflate = null;

      if(convertView==null){

                       //得到布局转换器

                       LayoutInflater layoutInflater= getLayoutInflater();

                       //把布局xml文件转换成布局对象

                       inflate = layoutInflater.inflate(R.layout.item,null);

    }else{

                       //用已经完全消失的布局对象去替代即将出现的布局对象

                       inflate = convertView;

   }

 

2、去减少控件的查找次数

2.1 单控件——将TextView位置上调

实现代码:

         Viewinflate = null;

         TextViewtextView = null;

         if(convertView==null){

                   LayoutInflaterlayoutInflater = getLayoutInflater();

                   //把布局xml文件转换成布局对象

                   inflate= layoutInflater.inflate(R.layout.item, null);

                   textView= (TextView) inflate.findViewById(R.id.textView1);

                   //ViewHolder对象放到inflate包里面

                   inflate.setTag(textView);

         }else{

                   //用已经完全消失的布局对象去替代即将出现的布局对象

                   inflate= convertView;

                   //把对象从inflate的口袋中

                   textView= inflate.getTag();

         }       

    2.2 多控件——使用ViewHolder:创建对象ViewHolder,将TextView封装到新ViewHolder中(放入的是多控件)

实现代码:

    ================================================

         classViewHolder{

                   TextViewtextView;

                   TextViewtextView2;

        

         }

         ================================================

    Viewinflate = null;

         ViewHolderholder = null;

         //convertView用来保存那个已经完全消失的布局对象

         if(convertView==null){

                   holder= new ViewHolder();

                   //得到布局转换器

                   LayoutInflaterlayoutInflater = getLayoutInflater();

                   //把布局xml文件转换成布局对象

                   inflate= layoutInflater.inflate(R.layout.item, null);

                   holder.textView= (TextView) inflate.findViewById(R.id.textView1);

                   holder.textView2= (TextView) inflate.findViewById(R.id.textView2);

                   //ViewHolder对象放到inflate包里面

                   inflate.setTag(holder);

         }else{

                   //用已经完全消失的布局对象去替代即将出现的布局对象

                   inflate= convertView;

                   //把对象从inflate的口袋中

                   holder= (ViewHolder) inflate.getTag();

         }

 

3、代码优化

       

       1、创建一个类,类的属性就是我们所需的数据类型

       2、创建一个容器

       3、把所需的数据都放到容器中

       4、根据position从容器中取出该行所对应的那个对象

       5、设置控件内容


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI