listView,gridView复用问题

前一段时间一直有一个问题困扰着我,就是listView中item的复用问题,从数据库请求下来的状态,然后会错乱,比如item被选中,然后在拉下去再返回去状态就改变

其实问题很简单,就是用一个map存储起来你的状态,然后在判断完convertview之后,赋值的时候设置判断

我的是从服务器读取的状态

因为重写的getView()是每次item出现的时候都要运行一遍,所以就在getView之后的

@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder = null;
		final Message message = datas.get(position);
		if(convertView == null){
			viewHolder = new ViewHolder();
			convertView = LayoutInflater.from(mContext).inflate(R.layout.message_item_layout, null);
			viewHolder.iconurl = (ImageView)convertView.findViewById(R.id.icon);
			viewHolder.name = (TextView)convertView.findViewById(R.id.name);
			viewHolder.title = (TextView)convertView.findViewById(R.id.title);
			viewHolder.time = (TextView)convertView.findViewById(R.id.time);
			viewHolder.isRead = (TextView)convertView.findViewById(R.id.isRead);
			convertView.setTag(viewHolder);
		}else{
			viewHolder = (ViewHolder)convertView.getTag();
		}
		mActivity.loadImage(message.getSendUserIcon(), viewHolder.iconurl);
		viewHolder.title.setText(message.getLetterTitle());
		viewHolder.name.setText(message.getSendUserName());
		viewHolder.time.setText(message.getLetterTime());
            //这就是重新设置状态的地方
               if(message.getIsCheck()){
			viewHolder.isRead.setVisibility(View.GONE);
		}else{
			viewHolder.isRead.setVisibility(View.VISIBLE);
		}
		return convertView;
	}



    if(message.getIsCheck()){
            viewHolder.isRead.setVisibility(View.GONE);
        }else{
            viewHolder.isRead.setVisibility(View.VISIBLE);
        }

注意:if() else 都要写

问题就解决了


至于其他的不复用解决问题的方法就不提了,容易oom ,这是我觉得解决问题最好方式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值