zoukankan      html  css  js  c++  java
  • Android中Listview的优化方法

    1.最普通的一种优化,创建一个适配器类使用getView()方法,声明一个View对象,用inflate一个view出来,通过findViewById()得到TextView,重复使用view对象和findViewById()的方法。

    private class MyAdapter extends BaseAdapter {
    
        @Override
        public int getCount() {
            return list_infor.size();
        }
    
        @Override
        public Object getItem(int i) {
            return null;
        }
    
        @Override
        public long getItemId(int i) {
            return 0;
        }
    
        @Override
        public View getView(int i, View convertView, ViewGroup viewGroup) {
            View view;
            view = View.inflate(MainActivity.this, R.layout.activity_item, null);
            TextView tv_item1=(TextView)view.findViewById(R.id.t1);
            TextView tv_item2=(TextView)view.findViewById(R.id.t2);
            TextView tv_item3=(TextView)view.findViewById(R.id.t3);
            tv_item1.setText(String.valueOf(list_infor.get(i).getId()));
            tv_item2.setText(list_infor.get(i).getName());
            tv_item3.setText(list_infor.get(i).getNumber());
    
         return view;
        }
    }

    2.优化二

    上面的写法没有实现重复使用View对象和findViewById()的方法,此次优化后,只保留能够显示的最大个数的View对象的个数,新的view通过复用的方式使用消失的条目,使用getView()方法中提供的convertView复用view,当convertView==null时,通过inflate一个view出来。

    private class MyAdapter extends BaseAdapter {
    
            @Override
            public int getCount() {
                return list_infor.size();
            }
    
            @Override
            public Object getItem(int i) {
                return null;
            }
    
            @Override
            public long getItemId(int i) {
                return 0;
            }
    
            @Override
            public View getView(int i, View convertView, ViewGroup viewGroup) {
                View view;
                if(convertView==null) {
                    view = View.inflate(MainActivity.this, R.layout.activity_item, null);
                }else{
                    view=convertView;
                }
               TextView tv_item1=(TextView)view.findViewById(R.id.t1);
                TextView tv_item2=(TextView)view.findViewById(R.id.t2);
                TextView tv_item3=(TextView)view.findViewById(R.id.t3);
                tv_item1.setText(String.valueOf(list_infor.get(i).getId()));
                tv_item2.setText(list_infor.get(i).getName());
                tv_item3.setText(list_infor.get(i).getNumber());
    
                return view;
            }
    
        }

     3.优化三

     通过上面的写法实现重复使用View对象,但没有解决view组件中的TextView,每次使用都要去xml文件中查找id的问题,此次优化后,可以实现让View中所包含的组件随着view的使用而使用。要创建一个静态内部类,类中的成员变量应与view中所包含的组件的类型个数相同。

    private static class ViewHolder{
            private TextView tvHolder;
            private TextView tvHolder1;
            private TextView tvHolder2;
        }
    private class MyAdapter extends BaseAdapter {
    
            @Override
            public int getCount() {
                return list_infor.size();
            }
    
            @Override
            public Object getItem(int i) {
                return null;
            }
    
            @Override
            public long getItemId(int i) {
                return 0;
            }
    
            @Override
            public View getView(int i, View convertView, ViewGroup viewGroup) {
                tv_item3.setText(list_infor.get(i).getNumber());
                View view;
                ViewHolder holder;
    
                if(convertView==null) {
                    view = View.inflate(MainActivity.this, R.layout.activity_item, null);
                    holder=new ViewHolder();
                    holder.tvHolder=(TextView)view.findViewById(R.id.t1);
                    holder.tvHolder1=(TextView)view.findViewById(R.id.t2);
                    holder.tvHolder2=(TextView)view.findViewById(R.id.t3);
                    view.setTag(holder);
    
                }else{
                    view=convertView;
                    holder=(ViewHolder)view.getTag();
                }
    
              holder.tvHolder.setText(String.valueOf(list_infor.get(i).getId()));
                holder.tvHolder1.setText(list_infor.get(i).getName());
                holder.tvHolder2.setText(list_infor.get(i).getNumber());
                return view;
            }
    
        }

    注意:

    1.根据保存在业务Bean中的属性,来确定View中组件TextView的个数。

    2.使用此方法要新建一个布局文件,根据需要设计布局文件。

  • 相关阅读:
    关于CSS单位:rem vh vw vmin vmax
    关于遍历一个数组的几种方法的比较
    关于ng的过滤器的详细解释angular-filter
    angular的路由跳转,的监听$rootScope.$on
    js经典校验之注册与登录校验
    CSS制作的32种图形效果[梯形|三角|椭圆|平行四边形|菱形|四分之一圆|旗帜]
    js的with语句使用方法
    js的DOM节点操作:创建 ,插入,删除,复制,查找节点
    js中的如何定位固定层的位置
    CommonJS、requirejs、ES6的对比
  • 原文地址:https://www.cnblogs.com/sunrise-hs/p/5679144.html
Copyright © 2011-2022 走看看