2012-10-04 77 views
4

搞清楚如何對列表視圖進行分區正在踢我的屁股。我在這裏看到了分區列表適配器的代碼: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; 

} 

這導致以下:

sample list

這是罰款,一個開始,但我提出了兩個問題:

  • 如何動態填充月份的「頭」的價值?我想過使用遊標來填充數組的列表(使用SimpleDateFormat格式化後),然後執行For Each循環遍歷每個循環,將月份傳遞迴遊標方法以將所有條目並在該月份的日期時間值。
  • 如何在一行中顯示結果作爲當天的條目數量?理想情況下,我想是這樣的: daterow

#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」,一個鍛鍊應用程序的截圖,有一個自定義的分區列表,但基本上我試圖重複,至少在功能上。

cardio trainer screenshot

這是從外觀來像這樣的表: ​​

+1

首先,當您需要自定義節標題時,我建議不要使用其他人的適配器。在列表中實施章節並不是很困難。我只需要一件事情。當你檢索一個光標到數據庫進行顯示時,你是否按時間排列所有數據?當一年中有變化時,你會做什麼?例如,您將展示2011年6月至12月的部分,那麼2012年1月的日期到來時會發生什麼? –

回答