2012-04-24 2 views
0

이 안드로이드 뷰 리사이클 문제는 꽤 미친 짓이며, 나는 하루 종일 해결 방법을 찾으려고 노력했습니다.android list 체크 박스

이 내 코드와

public class CustomCursorAdapter extends SimpleCursorAdapter { 

    private Context currentContext; 
    private Cursor mCursor; 
    private boolean[] rows; 

    public CustomCursorAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     // TODO Auto-generated constructor stub 
     currentContext = context; 
     mCursor = c; 
     populateRows(); 
    } 

    private void populateRows() { 
     rows = new boolean[mCursor.getCount()]; 
     int i = 0; 
     while (mCursor.moveToNext()) { 
      rows[i] = false; 
      i++;    
     } 

    } 

    @Override 
    public View getView(int position, View v, ViewGroup parent) { 
     // convertView.setBackgroundColor(R.drawable.darkred); 
     if (v != null) { 
      //getting checkbox 
      CheckBox cb = (CheckBox) v.findViewById(R.id.name); 

      if(rows[position]){ 
       rows[position] = false; 
      }else{ 
       rows[position] = true; 
      } 
      cb.setChecked(rows[position]); 

     } 

     return super.getView(position, v, parent); 
    } 

} 

어떤 도움이 감사를 작동하지 않는 것입니다. 여기에서 잘못

+0

을 팽창에 의해 예를 들어, 새로운 인스턴스를 작성해야합니다. 너 뭐하려고? 작동하지 않는 것은 무엇입니까? 어떻게 작동하지 않습니까? 더 많은 정보를 제공할수록 더 나은 도움을 얻을 수 있습니다. – Gophermofur

+0

메신저 db에서 커서를 반환하고 체크 박스의 체크 상태는 모든 db 컬럼과 관련이 없습니다. 나중에 내가 선택한 값을 db의 다른 테이블에 추가하면 그 부분이 작동합니다. 제대로 작동하지 않는 체크 박스를 선택합니다. –

답변

0

많은 것들이 :

  • 가의 getView에서 상태를 변경하지 마십시오. 나는 행 [위치]를 뒤집는 것을 말합니다. getView는 같은리스트 행을 묘화하기 위해서 여러 차례 호출 할 수가 있습니다. 보조 메모로 a =! a;를 사용하여 뒤집을 수 있습니다.
  • if v! = null의 if 상태를 체크 아웃 상태로 설정하십시오. 보기를 재활용하는 경우 다른 데이터 행의 상태로 설정 될 수 있으므로 UI를 초기화해야합니다. 뷰가 null는 아니고, 당신이 그것을 다시 사용하면 뷰가 null의 경우는
  • , 그것을
  • 를 반환, 당신은 당신이 더 구체적으로 할 수 레이아웃
+0

감사합니다. 그렇다면 onListItemClick 메서드의 상태를 어디에서 변경해야합니까? 그 중 하나가 작동하지 않습니다 –

+0

고마워요 내가 해결했지만 스택 오버플로 나를 내 대답을 게시 못하게 ... –