2013-12-13 87 views
1

我正在編寫一個管理學生時間表的應用程序,並且我遇到了演示文稿問題。我想讓所有項目按照他們開始的時間排序,如果第二天有應該顯示帶日期的列表分隔符。安卓列表分隔符和訂單

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    String day = cursor.getString(cursor.getColumnIndex("DAY")); 
    if(day.equals(lastDay)){ 
     separator.setVisibility(View.GONE); 
    }else{ 
     separator.setText(day + " " + dayOfWeek); 
     lastDay = day; 
     separator.setBackgroundColor(Color.parseColor("#0099CC")); 
    } 
} 

不幸的是,我面臨2個問題。第一個項目根本沒有排序,也許只有10個第一個,第二個在我看來,我無法控制每個單元格被繪製的時間,這就是爲什麼算法在最後一天完成時根本不起作用,而且我在每一個入口之間都有分隔符,除了少數第一個細胞...任何想法我怎麼能解決這個問題? (順便說一下,數據是從sqlite的DB牽強) 問候, 羅伯特

回答

0

有在你的答案代碼中沒有任何的排序,所以我不能幫你的第一個問題。

順便說一句,如果可能的話,你應該在SQLite級別對數據進行排序 - 它將比任何Java代碼都快。如果這是不可能的(例如,你的排序標準不能表示爲sqlite查詢),你應該在將數據傳遞給適配器之前對數據進行排序。在這種情況下,你應該創建你自己的BaseAdapter子類。

第二個問題是CursorAdapter的預期行爲。 bindView是按需調用的,所以當您向下滾動時會調用後續項目,但當您開始向上滾動時,會調用屏幕頂部出現的項目。詳細瞭解Android適配器中的視圖回收。

如果你想分段你的數據,我建議創建一個帶有兩種視圖類型的適配器 - 一個用於節標題,另一個用於實際項目。計算swapCursor()調用中添加的節項的位置並在newView/getView中調用不同的代碼。

0

1,您將需要按天列對數據進行排序。查詢數據庫並獲取遊標時,您需要執行此操作。排序字符串看起來像這樣:

"DAY ASC" 

2,這是非常棘手的事情。如果你自己這樣做了,你必須重新映射光標位置,並在getView上設置不同的視圖類型,如chalup所說的。我已經建立了一個圖書館,爲您做所有這些,但名爲SectionCursorAdapter。要自己實現這個擴展SectionCursorAdapter並執行以下操作。

@Override 
protected Object getSectionFromCursor(Cursor cursor) { 
    int columnIndex = cursor.getColumnIndex("DAY"); 
    String day = cursor.getString(columnIndex); 
    return day; 
} 

這會給你一個每一天的新部分。重視你回報的東西,你可以在一週或一個月內完成。