ListView高效率刷新

来源:互联网 发布:iptv机顶盒装软件 编辑:程序博客网 时间:2024/06/10 03:30
在使用重写`BaseAdapter`的时候一般都通过复用`ViewHolder`来达到加载列表高效率,当集合数据发生改变的时候,都要通过`adapter.notifyDataSetChanged()`来刷新列表;使用这个方法虽然简单方便,但效率上并不快;如果某项数据发生改变的时候,可以通过角标index,来只改变当前项的数据显示;在adapter加入一个方法,其中一个参数为要改变的角标,另一个传入listview对象,当当前显示的列表中包括要改变的项时,通过listview.getChildAt(local);此时这个local值应该为所传入的参数index-当前界面所能看到的第一个item的位置;如下:
int firstLocal = listview.getFirstVisiblePosition();int lastLocal = listview.getLastVisiblePosution();View view = listview.getChildAt(index-firstLocal);view是相对于当前所显示的item列表来说;view.getTag()得到viewholder;一定是当前显示中包含所要修改的项;通过viewholder这个对象直接修改;viewholder.tv.setText(list.get(index));

也可以通过

listview.getAdapter().getView(index,view,listview);调用adapter的getView方法给某项item修改数据;