关于listview或gridview刷新问题

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;
			}
		}
	}
  }



 

    大概思路就是将选中状态进行更改保存,根据选中状态更改图片显示情况

   

    

 

 

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值