Android初学之ListView对象的优化

来源:互联网 发布:php eval 替代方法 编辑:程序博客网 时间:2024/06/09 17:08
<h1>安全卫士中的listView优化</h1><pre><code>/**     * 有多少个条目被显示,这个方法就会被调用多少次     */    @Override    public View getView(int position, View convertView, ViewGroup parent)    {        //把一个布局文件转化成view对象        View view = View.inflate(getApplicationContext(), R.layout.list_item_callsms, null);        TextView tv_black_number = (TextView) view.findViewById(R.id.tv_black_number);        TextView tv_block_mode = (TextView) view.findViewById(R.id.tv_block_mode);        tv_black_number.setText(infos.get(position).getNumber());        String mode =  infos.get(position).getMode();        if("1".equals(mode))        {            tv_block_mode.setText("电话拦截");        }else if("2".equals(mode))        {            tv_block_mode.setText("短信拦截");        }else {            tv_block_mode.setText("全部拦截");        }        return view;    }}</code></pre><p>对其进行优化,复用回收对象后:</p><pre><code>    /**     * 有多少个条目被显示,这个方法就会被调用多少次     */    @Override    public View getView(int position, View convertView, ViewGroup parent)    {        View view;        if(convertView==null)        {            //把一个布局文件转化成view对象            view = View.inflate(getApplicationContext(), R.layout.list_item_callsms, null);        }else {            view = convertView;        }        TextView tv_black_number = (TextView) view.findViewById(R.id.tv_black_number);        TextView tv_block_mode = (TextView) view.findViewById(R.id.tv_block_mode);        tv_black_number.setText(infos.get(position).getNumber());        String mode =  infos.get(position).getMode();        if("1".equals(mode))        {            tv_block_mode.setText("电话拦截");        }else if("2".equals(mode))        {            tv_block_mode.setText("短信拦截");        }else {            tv_block_mode.setText("全部拦截");        }        return view;    }</code></pre><h2>继续优化</h2><pre><code>    /**     * 有多少个条目被显示,这个方法就会被调用多少次     */    @Override    public View getView(int position, View convertView, ViewGroup parent)    {        View view;        ViewHolder holder;        //减少内存中view对象创建的个数        if(convertView==null)        {            //把一个布局文件转化成view对象            view = View.inflate(getApplicationContext(), R.layout.list_item_callsms, null);            holder = new ViewHolder();            holder.tv_number = (TextView) view.findViewById(R.id.tv_black_number);            holder.tv_mode = (TextView) view.findViewById(R.id.tv_block_mode);            //当孩子生出来的时候找到他们的引用,存放在记事本,放在父亲的口袋            view.setTag(holder);        }else {            view = convertView;             holder = (ViewHolder) view.getTag();        }        //减少子孩子查询的次数、内存中对象的地址。        holder.tv_number.setText(infos.get(position).getNumber());        String mode =  infos.get(position).getMode();        if("1".equals(mode))        {            holder.tv_mode.setText("电话拦截");        }else if("2".equals(mode))        {            holder.tv_mode.setText("短信拦截");        }else {            holder.tv_mode.setText("全部拦截");        }        return view;    }/** * view对象的容器 * 记录孩子的内存地址 * 相当于一个记事本 * @author MS * */class ViewHolder{    TextView tv_number;    TextView tv_mode;}</code></pre>


0 0
原创粉丝点击