2012-06-07 14 views
8

是否有一種簡單的方法以相反的順序顯示ListView?我正在嘗試創建基於對話的應用程序,並希望最近的條目位於ListView的底部。我知道transcriptMode和stackFromBottom,但是我的問題是數據的順序。Android中的倒置ListView?

假設我有100個對話項目,並且希望顯示項目80-100,其中100是最近的對話項目。我想顯示80-100,這意味着我的查詢中有一個ORDER BY id desc LIMIT 20,這會迫使項目排序爲100到80,這與我需要的相反。我目前有一些討厭的內部查詢代碼,但覺得應該有一個更簡單的解決方案,基於反轉游標或簡單地顛倒ListView。

+0

不知道是否會工作,但你可以簡單地查詢所有項目,創建的最後20在'Cursor'一個數組的返回,然後從陣列中創建一個'MatrixCursor'和使用,對於'ListView'。請參閱http://developer.android.com/reference/android/database/MatrixCursor.html – Squonk

回答

9

baseAdapter內,對於getView()方法,而不是獲取該項目的數據在索引「位置」中,使用相反的,意思是:numberOfItems減去位置。

至於顯示的項目數量,這也是在baseAdapter內:設置由getCount()返回的值是你希望它的值(在你的例子中是20,儘管80-100意味着它應該是21) 。

順便說一句,看來你是listView的情況下的首發。我可以建議看這個視頻: http://www.youtube.com/watch?v=wDBM6wVEO70

也檢查由sdk經理提供的api演示。他們在那裏有很多例子。

+0

謝謝,我認爲這是最好的方式。我正在考慮繼承Cursor來創建一個ReverseCursor,並且考慮改變ListView,但是它們之間的一塊是明確的選擇。我剛剛觀看了羅曼2009年關於Android性能的I/O談話,這個談話暗示了這個方向,感謝指向ListView談話的指針。 – bjdodson

0

使用BETWEEN關鍵字查詢記錄對我來說似乎是最簡單的解決方案。

+0

謝謝,BETWEEN很有幫助,但對我而言並不適用,因爲我不想添加查詢來查找最後一條數據的位置。 – bjdodson

10

使用此的getItem適配器內部方法相反的順序:

@Override 
public Object getItem(int position) { 
    return super.getItem(super.getCount() - position - 1); 
} 
+0

你能告訴如何重寫適配器中的getItem()方法嗎? – Apurva

+0

@Apurva:我不明白你的問題嗎?您需要覆蓋註釋.. –

+0

但它顯示@Override在此處不被允許的消息。我試圖覆蓋onCreate方法 – Apurva

1

此代碼對我來說,從數據庫中提取數據時的工作。

cs.moveToPosition(super.getCount() - position - 1); //cs is Cursor