gridview优化

来源:互联网 发布:存在与时间 知乎 编辑:程序博客网 时间:2024/05/06 06:52

ListView和GridView是我们经常会使用的控件,所以它们的效率是一个非常重要的事情,如果我们滑动的时候,会出现停顿的现在,那么,这次是一个非常不好的体验。所以我们有必要要对这些控件进行优化。

其实,我们用这些控件的时候,都是通过adapter来进行给这些控件添加item的,所以我们的优化也就是在adapter里面进行的。其实这个优化方法也很简单,就是在进行view的绘制的时候,我们判断一下,是不是已经绘制过啦,如果绘制过了,那么就使用原来的,如果没有绘制过,那么就重新绘制。直接上代码,大家可以与我们之前写的那个adapter比较一下有什么不同


  1. @Override
  2.         public View getView(int position, View convertView, ViewGroup parent)
  3.         {
  4.                 //convertView 相当于缓存一样,只要我们判断一下它是不是为null,就可以知道现在这个view有没有绘制过出来
  5.                 //如果没有,那么就重新绘制,如果有,那么就可以使用缓存啦,这样就可以大大的节省view绘制的时间了,进行了优化,使ListView更加流畅
  6.                 MainViews views;
  7.                 View view;
  8.                 if(convertView == null)
  9.                 {
  10.                         views = new MainViews();
  11.                         view = inflater.inflate(R.layout.main_item, null);
  12.                         views.imageView = (ImageView) view.findViewById(R.id.iv_main_icon);
  13.                         views.textView = (TextView) view.findViewById(R.id.tv_main_name);
  14.                         views.imageView.setImageResource(ICONS[position]);
  15.                         views.textView.setText(NAMES[position]);
  16.                        
  17.                         view.setTag(views);
  18.                 }
  19.                 else
  20.                 {
  21.                         view = convertView;
  22.                         views = (MainViews) view.getTag();
  23.                         views.imageView = (ImageView) view.findViewById(R.id.iv_main_icon);
  24.                         views.textView = (TextView) view.findViewById(R.id.tv_main_name);
  25.                         views.imageView.setImageResource(ICONS[position]);
  26.                         views.textView.setText(NAMES[position]);
  27.                 }
  28.                        
  29.                 if(position == 0)
  30.                 {
  31.                         String name = sp.getString("lostName", "");
  32.                         if(!name.equals(""))
  33.                         {
  34.                                 views.textView.setText(name);
  35.                         }
  36.                 }
  37.                
  38.                 return view;
  39.         }
  40.        
  41.         //==================================================================================
  42.        
  43.         //一个存放所有要绘制的控件的类
  44.         private class MainViews
  45.         {
  46.                 ImageView imageView;
  47.                 TextView textView;
  48.         }

0 0
原创粉丝点击