1.notifydataSetChanged与notifyDataSetInvalidated
该文章是分析NotifydataSetView源码的:http://www.cnblogs.com/kissazi2/p/3721941.html
Changed means the data set changed. Individual items updated,
or items were added or removed. Invalidated means the data source is no longer available.
————两者的区别
2 局部刷新listview
面试的时候被问及你是如何刷新listview的,我很干脆的就notifydatachanged。。没了,但是notifydatachanged
重新绘制的是整个listivew(此处待考证,网络上说是刷新当前可见区域)
以下就是局部刷新的重要代码
public void updateView(int itemIndex) {
//得到第一个可显示控件的位置
int visiblePosition = mListView.getFirstVisiblePosition();
//只有当要更新的view在可见的位置时才更新,不可见时,跳过不更新
if (itemIndex - visiblePosition >= 0) {
//得到要更新的item的view
View view = mListView.getChildAt(itemIndex -
visiblePosition);
if(view!=null){
//此处的getView是调用adpater重写的方法getView
getVIew(itemIndex,view,listview);
}
}
}
3 gridview单选实现
gridview的单选实现方法重要代码如下
@override
..getView(..){
...
//该img是打钩图片
ImageView img = (ImageView) arg1.findViewById(R.id.img_cest);
setChecked(img, arg0);
...
}
/**
* 如果点击选择了该item则显示打钩的图片,否则隐藏
*
**/
public void setChecked(ImageView img, int arg0) {
if (check[arg0] == 0) {
img.setVisibility(View.INVISIBLE);
} else {
img.setVisibility(View.VISIBLE);
}
}
public void setSelectedItem(int itemPostion) {
this.currentItem = itemPostion;
getChecked();
//调用notifydatasetChanged()重绘制listview
notifyDataSetChanged();
}
/**
* check[]保存选中状态0表示未选中,1表示选中
*
**/
public void getChecked() {
for (int i = 0; i < check.length; i++) {
if (currentItem == i) {
if (check[i] == 0) {
check[i] = 1;
} else if (check[i] == 1) {
check[i] = 0;
}
}
}
}
大概思路就是将选中状态进行更改保存,根据选中状态更改图片显示情况