一起Talk Android吧(第七十五回:Android中UI控件之ListView优化)

各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView扩展的例子,这一回咱们说的例子是UI控件之ListView优化。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,我们都知道ListView是用来显示大量数据的控件,如果数据量太大了,效率就会非常的低,因此,我们非常有必要对ListView进行相关的优化。下面我们通过代码结合文字的方式来说明:如何优化ListView控件

  public class DIYAdapter extends ArrayAdapter<DataType>{
        private int itemId;
        public DIYAdapter(Context context, int textViewId, List<DataType> dataTypeList){
            super(context,textViewId,dataTypeList);
            itemId = textViewId;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            DataType itemData = getItem(position);
            ViewHolder viewHolder;
            View view;
            //View view = LayoutInflater.from(getContext()).inflate(itemId,parent,false);
            if(convertView != null) {
                view = convertView;
                viewHolder = (ViewHolder)view.getTag();
            }else {
                view = LayoutInflater.from(getContext()).inflate(itemId,parent,false);
                ImageView imageView = (ImageView)view.findViewById(R.id.list_item_image);
                TextView textView = (TextView)view.findViewById(R.id.list_item_text);
                viewHolder = new ViewHolder(imageView,textView);
                view.setTag(viewHolder);
            }
            viewHolder.mImageView.setImageResource(itemData.getImageId());
            viewHolder.mTextView.setText(itemData.getTitle());
//            ImageView imageView = (ImageView)view.findViewById(R.id.list_item_image);
//            TextView textView = (TextView)view.findViewById(R.id.list_item_text);
//            imageView.setImageResource(itemData.getImageId());
//            textView.setText(itemData.getTitle());

            return  view;
        }

        public class ViewHolder {
            private ImageView mImageView;
            private TextView mTextView;

            public ViewHolder(ImageView img, TextView text){
                mImageView = img;
                mTextView = text;
            }
        }
    }

看官们,优化的地方主要是适配器,大家重点看一下上面的代码中注释掉的代码,这些代码就是被优化掉的代码。

  • 第一个优化的地方是关于view的
    优化前每次都要获取view,优化后只有在第一次加载布局时获取view。那么如何判断是第一次加载布局呢?这个取决于getView的第二个参数,第一次加载布局的时候它是空的,以后ListView就会把加载好的布局缓冲起来,每次调用getView方法时,它会把缓冲的布局传递给第二个参数。

  • 优化的第二个地方是关于布局中的控件
    优化前我们每次都要去获取布局中的控件,优化后我们只需要在第一次加载布局时获取布局中的控件。这是如何实现的呢?我们使用了缓冲的技术,首先定义了缓冲类ViewHolder。类中的数据成员需要与布局文件中的控件相对应。我们在第一次加载布局的时候初始化一个缓冲类对象,并且使用view.setTag()方法把该对象存放到View中。以后只需要使用view.getTag()方法就可以获取到被缓冲的对象。

看官们,对ListView的优化主要使用了缓冲思想,这想可以大提高ListView的运行效率,在数据量小的时候可能体现不出来优化的好处,在数据量大的时候就可以体现出来了。因此,希望大家在使用ListView的时候能够进行优化。

各位看官,关于Android中UI控件之ListView优化的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!


猜你喜欢

转载自blog.csdn.net/talk_8/article/details/80488858