[英]Android SimpleCursorAdapter and Database Update
我剛開始從事Android開發,到目前為止,我一直很喜歡。 為了獲得一些經驗,我正在編寫一個小的待辦事項應用程序。 在我的數據庫中,我有一個待辦事項的狀態,表示為int。 我在列表視圖中使用一個復選框來表示此狀態。 要將數據綁定到視圖,我使用SimpleCursorAdapter的子類。 我將onClickListener添加到復選框中,以更新數據庫中已用列表項的狀態。 問題是,如果我使用以下代碼,則該列表會在顯示屏幕中搞砸(將檢查許多項目):
@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中更新數據庫並使更改立即反映在視圖中的最佳實踐是什么?
謝謝
凱
使用notifyDataSetChanged而不是重新查詢,並且如果以前的方法沒有執行任何操作,則可以在視圖上使用invalidate 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.