BaseAdapter的优化

      上一篇使用了lsitview及自定义BaseAdapter,不难发现其中代码有很大的缺陷,在MyBaseAdapter中getView()方法会有重复加载布局的情况,这将会使listView的运行效率降低,因此需要进行优化。本文章为学习《第一行代码》过程小结笔记。
     优化步骤如下:
          ①我们可以利用好convertView这个参数将之前加载好的布局进行缓存,以便后面可以重用,不用重新加载,主要是对getView()方法中进行判断,如果convertView为空;则使用layoutInflater去加载布局,否则直接堆convertView进行重用;
          ②新增内部类ViewHolder,用于对控件的实例进行缓存。当convertView为空的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder,调用setTag()方法将ViewHolder对象存储在View中的getTag()方法,把ViewHolder重新取出。

优化代码如下:
@Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        if(view==null) {
            view = LayoutInflater.from(mContext).inflate(R.layout.item, viewGroup, false);
            viewHolder = new ViewHolder();

            viewHolder.img_icon = (ImageView) view.findViewById(R.id.pic);//利用view对象找到布局中的组件
            viewHolder.txt_title = (TextView) view.findViewById(R.id.title);
            viewHolder.txt_context = (TextView) view.findViewById(R.id.context);
            view.setTag(viewHolder);
        }else
        {
            viewHolder= (ViewHolder) view.getTag();
        }
        viewHolder.img_icon.setBackgroundResource(mData.get(i).getIcon());
        viewHolder.txt_title.setText(mData.get(i).getTitle());
        viewHolder.txt_context.setText(mData.get(i).getContext());
        return view;
    }

    static class ViewHolder {
        ImageView img_icon;
        TextView txt_title;
        TextView txt_context;
    }
}


猜你喜欢

转载自blog.csdn.net/Best_CXY/article/details/65467759
今日推荐