搞清楚如何對列表視圖進行分區正在踢我的屁股。我在這裏看到了分區列表適配器的代碼:ListView with scrolling/fixed header rows,這可能最終是我想要的,但也許有更好的方法。動態創建每個月的標題行列表視圖
這裏有我需要的要求:
- 數據的列表視圖需要來自SQLite數據庫(請參閱下面的代碼表佈局)
- 數據應該按月(用於分組積分月/年)
- 標題行應該包含在數據庫中記錄該月
- 項目的數量必須與API兼容8+
- 需要能夠單擊一個項目,打開撥號OG包含在這一天進行的移動(我已經知道如何做到這一點,一旦我能得到一個列表中創建)
這裏傑夫Snarkey的seperatedListAdapter展望:http://jsharkey.org/blog/2008/08/18/separating-lists-with-headers-in-android-09/我能夠想出如下:
datasource = new SmashDataSource(this);
datasource.open();
BJJHistory = (ListView) findViewById(R.id.ListHistory);
// create our list and custom adapter
adapter = new SeparatedListAdapter(this);
HistoryBJJ = datasource.getBJJHistory();
// THE DESIRED COLUMNS TO BE BOUND
final String[] columns = new String[] { SQLiteHelper.DATE };
// THE XML DEFINED VIEWS WHICH THE DATA WILL BE BOUND TO
final int[] to = new int[] { R.id.list_item_title };
if (HistoryBJJ != null) {
adapter.addSection("October", new SimpleCursorAdapter(this, R.layout.list_item,
HistoryBJJ, columns, to));
}
BJJHistory.setAdapter(adapter);
這使用以下光標以降序從SQLite數據庫中提取數據:
public Cursor getBJJHistory() {
final String[] columns = { SQLiteHelper.COLUMN_ID, SQLiteHelper.DATE };
final Cursor History;
History = database.query(SQLiteHelper.TABLE_BJJ, columns, null, null, null, null,
SQLiteHelper.DATE + " DESC");
return History;
}
這導致以下:
這是罰款,一個開始,但我提出了兩個問題:
- 如何動態填充月份的「頭」的價值?我想過使用遊標來填充數組的列表(使用SimpleDateFormat格式化後),然後執行For Each循環遍歷每個循環,將月份傳遞迴遊標方法以將所有條目並在該月份的日期時間值。
- 如何在一行中顯示結果作爲當天的條目數量?理想情況下,我想是這樣的:
#2的答案有些很簡單,只需將兩個textviews在ListView行佈局,更重要的是複雜的是如何組數據庫中的所有行對於每一天,或者至少每天進行一次計數,並使用該計數顯示在列表中。
對於第一,要追溯到示例代碼在這裏:http://code.google.com/p/android-section-list/,而不是提供的例子陣列,我想我可能改變如下:
SectionListItem[] exampleArray = { // Comment to prevent re-format
new SectionListItem("Test 1 - A", "A"), //
new SectionListItem("Test 2 - A", "A"), //
new SectionListItem("Test 3 - A", "A"), //
new SectionListItem("Test 4 - A", "A"), //
new SectionListItem("Test 5 - A", "A"), //
new SectionListItem("Test 6 - B", "B"), //
new SectionListItem("Test 7 - B", "B"), //
new SectionListItem("Test 8 - B", "B"), //
new SectionListItem("Test 9 - Long", "Long section"), //
new SectionListItem("Test 10 - Long", "Long section"), //
new SectionListItem("Test 11 - Long", "Long section"), //
new SectionListItem("Test 12 - Long", "Long section"), //
new SectionListItem("Test 13 - Long", "Long section"), //
new SectionListItem("Test 14 - A again", "A"), //
new SectionListItem("Test 15 - A again", "A"), //
new SectionListItem("Test 16 - A again", "A"), //
new SectionListItem("Test 17 - B again", "B"), //
new SectionListItem("Test 18 - B again", "B"), //
new SectionListItem("Test 19 - B again", "B"), //
new SectionListItem("Test 20 - B again", "B"), //
new SectionListItem("Test 21 - B again", "B"), //
new SectionListItem("Test 22 - B again", "B"), //
new SectionListItem("Test 23 - C", "C"), //
new SectionListItem("Test 24 - C", "C"), //
new SectionListItem("Test 25 - C", "C"), //
new SectionListItem("Test 26 - C", "C"), //
,並替換成光標或什麼不可以需要按天提取數據,然後用「A」,「B」,「C」代替月份名稱。
這是非常令人迷惑我,因爲我還在學習,我已經得到了這個應用程序的幾乎每一個部分的完整,我無法弄清楚如何將數據段成一個列表
由於一個參考,這是一個「CardioTrainer」,一個鍛鍊應用程序的截圖,有一個自定義的分區列表,但基本上我試圖重複,至少在功能上。
這是從外觀來像這樣的表:
首先,當您需要自定義節標題時,我建議不要使用其他人的適配器。在列表中實施章節並不是很困難。我只需要一件事情。當你檢索一個光標到數據庫進行顯示時,你是否按時間排列所有數據?當一年中有變化時,你會做什麼?例如,您將展示2011年6月至12月的部分,那麼2012年1月的日期到來時會發生什麼? –