2011-02-04 37 views
0

我有一個ListActivity從數據庫查詢中獲取其數據。我也有一個擴展簡單遊標適配器的自定義適配器。Android - 更新simpleCursorAdapter

要顯示自定義內容,我已經覆蓋了newView和bindView方法。

視圖的每個元素有:

  1. TextView含有標題
  2. ImageView含有分號碼 - 中所示的圖像被改變基於從數據庫
  3. A按鈕而獲得的值 - 的單擊按鈕文本更改(Favorite/Make Favorite),並觸發數據庫更新事件。

我的問題是這樣的 - 當我滾動ListView,改變我做似乎消失了..例如,第一項被標記爲最愛,而列表中滾動......當我回來了第一項,文本恢復到其以前的值,雖然內部數據庫已更新。

我讀到notifyDatasetChanged()不適合這種情況,因爲適配器應該被通知數據庫的變化。我正在嘗試使用reQuery()方法,但不知道將它放在哪裏。

我應該將reQuery()放在按鈕的onClick方法中嗎?如果不是,它應該放在哪裏?

回答

0

使以往任何時候適配器是什麼,你正在使用必須getView方法..每當一個列表滾動此getView方法得到了呼籲在視圖中的所有的listItem。確保在getView方法中。該視圖正在動態生成。


它應該檢查點擊或更改的值。


無需滾動您必須調用listView.getAdapter()來更新列表。notifyDataSetChanged()

查看以下鏈接。這裏我提到了一個完整的代碼來正確使用listview。使用這個我們可以實現任何列表視圖行爲。我們也可以嵌入動畫。

Change ListView background - strange behaviour

希望這有助於:)

+0

感謝,是真正有用的,它幫我解決其他一些問題,但我仍然有同樣的問題,即適配器不知道的觀點已經改變。這就是我的代碼所做的,更改是數據庫更改 - 即視圖元素具有嵌入式按鈕,並且按鈕單擊會更改數據庫中的值。 關閉並重新打開活動顯示數據庫正確更新,但不是實時。 我的活動類擴展ListActivity – 2011-02-06 04:17:22

0

如果在數據更改後調用listView.setAdapter()和getView()方法擴展了BaseAdapter, ,則更新視圖的數據。

0

使用SetListAdapterArrayAdapter來顯示列表。使用ConvertView來避免充氣View

if (convertView==null) 
{ 
    //inflate your list 
} 
相關問題