2013-02-14 122 views
3

如何在更新數據庫sqlite上的行後更新listview中的項目。我已經把notifyDataSetChanged(),但不成功,沒有錯誤,但不刷新行中的數據。如果我再次單擊菜單並打開列表,數據將會更改。所以我想更新數據後更新行中的數據。在我的代碼結構下面,謝謝。在更新數據庫sqlite後更新列表視圖

CustomBaseAdapter adapter; 
ListView cListView; 
中的onCreate

cListView = (ListView) findViewById(R.id.list_category); 
List<ItemsArtikel> rowItems = (List<ItemsArtikel>) db.getAllCategory(katname); 
adapter = new CustomBaseAdapter(this, rowItems); 
cListView.setAdapter(adapter); 

查詢listcategory:

public List<ItemsArtikel> getAllCategory(String cat) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    List<ItemsArtikel> cList = new ArrayList<ItemsArtikel>(); 
    String selectQuery = "SELECT * FROM " + TABLE_CAT + " WHERE " 
      + COLOM_KAT + "=\"" + cat + "\""; 
    Cursor c = db.rawQuery(selectQuery, null); 
    c.moveToFirst(); 
    if (c.getCount() > 0) { 
     do { 
      ItemsArtikel kat = new ItemsArtikel(); 
      kat.setID(c.getLong(c.getColumnIndex(COLOM_ID))); 
      kat.setName(c.getString(c.getColumnIndex(COLOM_NAME))); 
      kat.setLink(c.getString(c.getColumnIndex(COLOM_LINK))); 
      kat.setImage(c.getString(c.getColumnIndex(COLOM_IMAGE))); 
      kategoriList.add(kat); 
     } while (c.moveToNext()); 
    } 
    return cList; 
} 

後,我使用列表視圖呈現for下載圖片,並在下載圖像使用的AsyncTask更新每一行的數據庫。下載圖像成功和行更新成功,只是不刷新在列表視圖。

這是代碼onPostExecute時下載圖片:

@Override 
protected void onPostExecute(HashMap<String, Object> result) { 
    String id = (String) result.get("id"); 
    String path = (String) result.get("image"); 

    // update row in database 
    db.updateRowCategory(id, path); 

    cListView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
} 

回答

2

在調用notifyDataSetChanged()它只會通知登記以更新內容以反映更改。

在你的情況下,你正在更新數據數據庫不在適配器數據模型。要反映ListView中的更改,您需要更新Adapter's數據模型,然後調用notifyDataSetChanged();

OR

如果您是直接從數據庫使用CursorAdapter呈現數據和實施onContentChanged()更新的ListView

+0

您好Animesh,感謝您的回覆。我已經更新了我的帖子,所以如何使用onContentChanged(),如果我可以使用上面的查詢。 – 2013-02-14 03:50:01

0

使用下面的行前添加適配器。

@Override 
protected void onPostExecute(HashMap<String, Object> result) { 
    String id = (String) result.get("id"); 
    String path = (String) result.get("image"); 

    // update row in database 
    db.updateRowCategory(id, path); 
    cListView.Invalidate(); 
    cListView.setAdapter(adapter); 
    cListView.Invalidate(); 
    adapter.notifyDataSetChanged(); 
} 
+0

在哪裏?你能否將我的代碼複製到你的答案中,謝謝 – 2013-02-14 06:14:40