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; } } } }
大概思路就是将选中状态进行更改保存,根据选中状态更改图片显示情况