2010-08-13 36 views
0

我剛剛開始使用Android開發,並且非常喜歡它。爲了獲得 的一些經驗,我正在寫一個todo應用程序。在我的 數據庫中,我有一個todo項目的狀態,表示爲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不爲空:

@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中的數據庫並獲取視圖中立即反映的更改的最佳做法是什麼?

感謝

回答

相關問題