一.ListView的优化
①视图的复用:
在创建继承BaseAdapter的适配器的时候重写四个方法,其中最重要的两个方法是getCount(),和getView(),
在getVIew()中有个参数convertVIew,这个就是以前是曾经显示的view,还没有被清除,可以通过复用这个来减少创建,
达到节省资源的目的.
②自定义视图的容器减少空间的查询次数,最好定义成静态的类:
创建一个内部类,参数是你需要用到的空间,当使用打气筒的时候就可以同时初始化这个类,并对其的参数赋值,值是寻找的空间,
然后调用setTag(),若convertView存在时,再调用getTag()方法强转成容器对象,相当于给View添加一个类成员变量.
//创建内部类
static class ViewHolder{
private TextView tv;
.....................(个数根据自己需要)
}
//在适配器的getVIew()方法进行下面的操作
getView(){
View view;
ViewHolder holder;
if(convertView == null){
view = View.inflat(........)(俗称打气筒,将一个布局文件做成视图);
holder = new ViewHolder();
holder.tv = (TextVIew)view.findById(R.id...);
...........(个数根据自己需要)
view.setTag(holder);
}else{
view = convertView;
holder = (ViewHolder)view.getTag();
}
//下次想要设置某个空间的值得时候就可以直接这样就可以了
holder.tv.setText(.............);
................................
}
③是进行分页加载:
这是我们可以设定的预先加载大概多少条
二.ListView特殊属性详解:
android:divider="@null" 清楚ListView的分割线
android:cacheColorHint="@android:color/transparent" 清楚ListView的背景色
android:layoutAnimation="@anim/layoutanimation" 这个属性可以设置ListView的条目动画,首先是在res下创建anim文件夹,然后分别创建以set和layoutAnimation为节点的xml文件,在后一个xml中调用前一个。
例如:这是set节点的xml:
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:fromXDelta="-100%"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0"
android:duration="1000"
android:interpolator="@android:anim/overshoot_interpolator" />
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:duration="2000"
/>
</set>
这是layoutAnimation的xml
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/list_animation"
android:animationOrder="normal"
android:delay="0.1" />
android:listSelector="#aaa"设置ListView条目点击后整个条目的背景色
三.ListView的闪屏问题:加载文字是不会出现的,加载图片会出现类似问题
1.最简单是图片加载框架的方法去处理,我用的是Glide,只要设置.skipMemoryCache(false);把该方法设置成false即使用缓存即可,其他框架自寻,都有的
2.其实出现这个问题就是因为条目复用导致的,在可视条目上的图片缓存还存在,但是一般我们又直接网络加载进行覆盖,一般解决方法就是通过setTag(arg)和getTag(arg)方法查询是cache否存在,存在直接设置,不存在再网络加载