2012-05-30 37 views
1

我的問題是我有一個listview與複選框可見性不見了,當清除按鈕被選中複選框得到可見我stroing狀態的複選框,但問題是,當複選框被選中它調用onCheckChange()並做工作設定的狀態,但在我看來recylces再次setChecked到店狀態,並再次調用我的onCheckChanged,我不知道爲什麼,當我滾動備份它不恢復我的狀態檢查... 這是我的代碼回收getView忘記查看狀態

public View getView(int position,View convertView,ViewGroup parent) 
    { 
     final int currentPosition=position; 

     View row=convertView; 

     if(row==null) 
     { 
      LayoutInflater inflater=((Activity)context).getLayoutInflater(); 
      row=inflater.inflate(layoutResourceId, parent,false); 
      holder=new Feedbacks(); 
      holder.lvGuestName=(TextView)row.findViewById(R.id.guestName); 
      holder.checkBox=(CheckBox)row.findViewById(R.id.clearCheck); 


      row.setTag(holder); 

     }  
     else 
     {    
      holder=(Feedbacks)row.getTag();    
     } 

     if(showCheckbox) 
     { 
      holder.checkBox.setVisibility(View.VISIBLE);   
     } 
     else 
     { 
      holder.checkBox.setVisibility(View.GONE); 
     } 
     holder.lvGuestName.setText(feedbackList.get(position).getGuestName());   
     holder.checkBox.setChecked(checks.get(position)); 
     holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
     { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
      { 
       if(isChecked) 
       { 
        checks.put(currentPosition, true); 

       } 
       else 
       { 
        checks.put(currentPosition, false);    
       } 

      }     

     }); 
     return row;          

    } 

回答

0

試着用這個。

holder.checkBox.setTag(position); 

holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      Integer currentPosition = Integer.parseInt(buttonView.getTag().toString()); 
      if(isChecked) 
      { 
       checks.put(currentPosition, true); 

      } 
      else 
      { 
       checks.put(currentPosition, false);    
      } 

     }     

    }); 

此外,沒有必要使用新的視圖「行」。重新使用convertView而不是行並返回它。您在這裏使用View來浪費內存。所以只需重用convertView。

+0

我已經解決了......任何方式謝謝 –