对于ListView、Gridview刷新列表我们并不陌生,只需要在数据源改变之后,调用BaseAdapter的notifyDataSetChanged方法,就可以刷新列表了。但是,如果我们只改变了某一行item的数据,只需要刷新单条item,也去调用notifyDataSetChanged方法,就显得没必要了,因为我们并不需要去刷新其它的item。在这里,我们需要一种方法,只刷新单条数据,而不是刷新整个列表。
Google向我们推荐了一种写法,当需要改变某一行的数据时,只需要调用该行的getView()即可,代码如下:
public void notifyDataSetChanged(ListView listView,int position){
int firstVisiblePosition = listView.getFirstVisiblePosition();
int lastVisiblePosition = listView.getLastVisiblePosition();
if(position >= firstVisiblePosition && position <= lastVisiblePosition){
View item = listView.getChildAt(position - firstVisiblePosition);
getView(position,item,listView);
}
}
由于ListView是复用缓存convertView的,所以converView的个数是屏幕上能显示的条数那么多,并且只刷新屏幕当中我们可以看到的数据,看不到的就没必要刷新了。我们根据position拿到需要更新的那个item,调用一次getView,就实现了局部刷新。