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