2011-03-09 44 views
2

由於我遠離筆記本電腦並且無法生成任何代碼示例,所以我提前表示歉意,但希望我可以清楚地回答我的問題。我有一個由sqlite數據庫支持的ListView(通過SimpleCursorAdapter)。我正在嘗試實現功能,因此列表一次僅顯示db查詢中的某些元素。我已經通過在onCreate中加載數據庫中的所有數據並在啓動列表時使用首選的元素重寫SimpleCursorAdapter的getCount方法來完成此操作。我也有一個按鈕,可以將更多元素加載到列表中。這是通過更新getCount應返回的計數完成的。Android SimpleCursorAdapter - 限制ListView結果

這可以在添加更多列表視圖行時正常工作,但是在單擊按鈕後,我看到列表中的內容出現奇怪的行爲。我看到重複的列表元素和不正確的元素內容,它們是在我的bindview方法中設置的。我假設這與重寫getCount方法有關(我確定你是一個更好的方法來執行「加載下一個25」函數),因爲我沒有看到這種行爲,當我只顯示整個數據庫結果集並且不要重寫該方法。

我想我的問題是,當你處理SimpleCursorAdapter時,我的問題是可以覆蓋getCount方法導致bindview方法中有趣的行爲?使用db查詢結果來支持你的ListView,實現這種類型的功能的最好方法是什麼?

在此先感謝...如果需要,我可以在明天回到筆記本電腦時提供代碼片段。

+1

我不推薦。如果數據庫包含少於#個條目,會發生什麼情況?我想這可能會導致不可預知的行爲。我會選擇Flo的解決方案。 – spa 2011-03-09 09:47:10

回答

5

我想你可以通過簡單地使用不同的查詢來獲得結果來歸檔。 SQLite支持一個LIMIT operator,它可以返回查詢的前n個結果。

所以,你的第一個查詢看起來是這樣的:SELECT [your columns] FROM [your table] LIMIT 25

而且當按下加載在未來25個結果按鈕,創建一個新的查詢與50的限制,並使用綁定導致光標移動到SimpleCursorAdapter changeCursor()方法。

+0

非常感謝您的幫助!我試圖在db.query()調用的範圍內工作,我不認爲允許LIMIT參數,但我忽略了考慮只用直接SQL語句使用execSQL()方法。我將在我的代碼中進行此更改,再次感謝!一個快速跟進問題......如果我使用這種方法,ListView是否會從光標的第一個結果開始回溯?換句話說,ListView會自動回滾到頂部,還是會保持用戶靠近ListView停止的位置,並按下「Next x」按鈕查看引入的新記錄。 – 2011-03-09 18:04:51

+0

不客氣。關於你的第二個問題,我不知道列表會如何反應,但我確定有一種方法可以讓列表向下滾動到新查詢之前的最後一項。雖然在ListView類的方法setSelection()和setSelectionAfterHeaderView()之前我從未使用過它們,但對於此問題看起來非常有希望。 – Flo 2011-03-09 18:31:43

+0

好吧,我會看看這些方法。謝謝。 – 2011-03-09 20:51:15

相關問題