2010-08-13 5 views
0

방금 ​​Android 개발로 시작하여 지금까지 좋아했습니다. 약간의 경험을 얻으려면, 나는 약간의 할 일을 작성하고있다. 내 데이터베이스에서 나는 int로 표현되는 할 일 항목에 대한 상태를가집니다. 이 상태를 나타 내기 위해 목록보기에서 체크 박스를 사용합니다. 뷰를 에 바인딩하려면 SimpleCursorAdapter의 하위 클래스를 사용합니다. 사용 된 목록 항목에 대해 데이터베이스의 상태를 업데이트하는 확인란에 onClickListener를 추가합니다.Android SimpleCursorAdapter 및 데이터베이스 업데이트

@Override 
public View getView(final int pos, View inView, ViewGroup parent) { 
    View view = inView; 
    if (view == null) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.toodoolist_item, null); 
    } 
    cursor.moveToPosition(pos); 
    ... 

    checkBox.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     int state = 0; 
     if (checkBox.isChecked()) { 
     titleView.setPaintFlags(titleView.getPaintFlags() 
      | Paint.STRIKE_THRU_TEXT_FLAG); 
     titleView.setEnabled(false); 
     state = 1; 
    } else { 
     titleView.setPaintFlags(titleView.getPaintFlags() 
      ^Paint.STRIKE_THRU_TEXT_FLAG); 
     titleView.setEnabled(true); 
    } 

    ContentValues values = new ContentValues(); 
    values.put(TooDooTable.STATE, state); 
    context.getContentResolver() 
     .update(ContentUris.withAppendedId(
    TooDooTable.CONTENT_URI, id), values, null, null); 
    cursor.requery(); 
    } 
} 

나의 현재 해결 방법은 심지어 을 경우마다 인플레이터를 사용하는 것입니다 : 문제는 그 다음 코드를 사용하는 경우, 목록이 (많은 항목이 선택됩니다) 디스플레이에 나사 고정입니다 inView가 null이 아닙니다.

@Override 
public View getView(final int pos, View inView, ViewGroup parent) { 
    View view = inView; 
    LayoutInflater inflater = (LayoutInflater) context 
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.toodoolist_item, null); 
    ... 

이 작동하지만 왜이 해킹을해야하는지 이해할 수 없습니다.

CurserAdapter에서 데이터베이스를 업데이트하고 변경 사항을 뷰에서 즉시 반영하는 것이 가장 좋은 방법은 무엇입니까? 이전 방법이 아무것도하지 않는 경우

감사

카이

답변

관련 문제