0

我是Android編程新手,有一個基本問題。如何一次性將ListView保存到數據庫中

我已經創建了一個ListActivity其中ListView中的每一行都有一個TextView和一個RatingBar。我可以通過從預填充的數據庫讀取它們來顯示TextViewRatingBar中的值;我通過自定義CursorAdapter這樣做的,這是bindView()方法,即

public class MyCursorAdapter extends CursorAdapter { 
    ... 

    public void bindView(View view, Context context, final Cursor cursor) { 
     TextView name = (TextView)view.findViewById(R.id.name); 
     name.setText(cursor.getString(cursor.getColumnIndex(MyDbAdapter.KEY_NAME))); 
     RatingBar rating = (RatingBar)view.findViewById(R.id.life_bar_rating); 
     rating.setRating(cursor.getFloat(cursor.getColumnIndex(MyDbAdapter.KEY_RATING_VALUE))); 
    } 

    ... 
} 

現在,我的問題是,在我的ListActivity我希望用戶能夠點擊「保存」按鈕,以便保存所有更改到數據庫一氣呵成?我將如何遍歷適配器以獲取行ID和評級值,以便它們可以被保存(或者是否有另一種更好的方法來做到這一點?)。

我之所以想要一次性保存是因爲我認爲每次用戶更改單個評分時更新數據庫都是不好的做法(儘管這很容易),因爲這會導致閃存更多磨損。我可能對此有錯,但我認爲閃存的讀寫數量有限。

回答

2

記住適配器的後備陣列?你用來初始化它的那個?保存;)

,或者如果不工作...

for(int i = 0; i < listView.getAdapter().getCount(); i++) 
    SaveThing(listView.getAdapter().getItem(i)); 

,如果你需要保存的SQLite的例子...明天。

編輯爲同一保持評論乾淨的:

至於該對象的事情會發生 - 你可以自由地將其轉換爲任何在列表視圖。數據類型,而不是視圖類型。

例如,一個與字符串一起工作的arrayAdapter仍然返回Objects。但是你肯定會把它們投射到絃樂器上,因爲你知道這就是你放入的東西。它很尷尬,但事實如此。

+0

感謝您的幫助!我沒有初始化任何支持數組 - 我是否需要爲CursorAdapter執行此操作?此外,getItem(我)返回一個「對象」 - 我將如何從它提取RatingBar(我不需要TextView)? – Mewzer 2012-07-30 15:42:29

+0

編輯。我寧願在適配器中創建一個getRating(int position)方法,並使用它代替getItem()...但這意味着子類化適配器。 – Shark 2012-07-30 15:49:28