优化ListView加载数据逻辑
当ListView控件在当前屏幕上加载的Item过多并快速滑动该控件时,界面会出现卡顿的现象,出现这个现象的原因如下:
(1)当滑动屏幕时,不断地创建Item对象。ListView空间在当前屏幕上显示多少个Item,就会在适配器MyBaseAdapter中的getView()方法中创建多少Item对象。当滑动ListView控件时,滑出会不断地对Item对象进行销毁和创建。
(2)不断执行findViewById()方法初始化控件。每创建一个Item对象都需要加载一次Item布局,加载布局时不断地执行findViewById()方法初始化控件。这些操作比较耗费设备(模拟器,手机等设备)的内存并且浪费时间,如果每个Item都需要加载网络图片,加载网络图片是个比较耗时的操作,就会造成程序内存溢出的异常。
由于上述两点原因,我们需要对ListView控件进行优化,优化的目的是使ListView控件在快速滑动时不再重复创建Item对象,减少内存的消耗和屏幕渲染的处理。优化的具体步骤如下:
(1)创建ViewHolder类。在MainActivity中创建一个ViewHolder类,将需要加载的控件变量放在该类中,具体代码如下:
class ViewHolder{
TextView title,price;
ImageView iv;
}
(2)在MyBaseAdapter的getView(int position,View convertView,ViewGroup parent)方法中convertView代表的就是滑出屏幕的Item对象。这种滑动屏幕就时以缓存的形式存在。