簡體   English   中英

Android SimpleCursorAdapter和數據庫更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM