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 ,這是我覺得解決問題最好方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章