2012-05-30 2 views
1

내 문제는 내가 가진 명확한 버튼을 선택했을 때 가시성이 사라 졌을 때 listview를 가지고있다. 체크 박스가 보인다 나는 체크 박스의 상태를 스트링하고 있지만 문제는 체크 박스가 onCheckChange()를 호출하고 체크한다. 상태를 설정하기 위해 노력하지만 내보기 recylces 때 다시 저장 상태로 setChecked 다시 내 onCheckChanged 호출하고 내가 위로 다시 스크롤 할 때 내 확인 상태를 복원 나던 이유를 잘 모릅니다 ... 이 내 코드입니다리사이클 getView forgets보기 상태를

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를 재사용하여 반환하십시오. 여기서보기를 사용하여 메모리를 낭비하고 있습니다. 그래서 convertView를 재사용하십시오.

+0

나는 그것을 해결했다 ... 어쨌든 감사합니다. –

관련 문제