2011-10-30 44 views

回答

19

看看這個Android – Sectioned Headers in ListViews的例子,它很好地描述瞭如何在ListViews中實現分段頭。

而且

android-amazing-listview

Jeff Sharkey's SeparatedListAdapter

MergeAdapter by CommonsWare

感謝。

+0

謝謝,我已經解決了這個問題。 – stream

+0

這些鏈接中的任何一個都可以幫助您在用戶滾動瀏覽部分時將標題行固定到屏幕頂部? – topwik

+0

@towpse - 嘿,我沒有明白你的意思嗎? – user370305

12

創建您的列表項目佈局一個頭佈局的例子。我們使用VISIBILITY選項來顯示和隱藏HEADER LAYOUT。這將像節標題。

在適配器「getView」方法中,使用前一個LIST ITEMS「名稱字段」的第一個字母檢查「名稱字段(在您顯示的名稱符合的情況下)」的第一個字母。如果它隱藏了HEADER LAYOUT(帶有文本視圖),那麼用標題文本顯示HEADER LAYOUT並顯示名稱字段的第一個字母。

這裏是代碼

String nameFirstLetter =「A」; //全局聲明,而不是在getView中。

//裏面的getView String nameF = Name.slice(0,1);

if(!nameFirstLetter.equals(nameF)){ 
     nameFirstLetter = nameF ;   
     holder.headerText.setText(nameFirstLetter); 
     holder.headerLayout.setVisibility(View.VISIBLE); 
    }else{ 
     holder.headerLayout.setVisibility(View.GONE); 
    } 

這是爲了顯示Android的列表視圖節頭中的最簡單的方法,但它不會像iPhone節頭,即工作。當我們向上/向下滾動時,部分標題會與其他列表項目一起隱藏。

+0

如果列表項是可點擊的,這會使標題可點擊。特別是現代Android中的漣漪,現在對用戶來說是非常明顯的。 –

3

如果任何人需要不同的解決方案,尤其是那些更習慣於iOS開發的解決方案,更喜歡它,或者想模擬iOS外觀;我提出以下建議:

http://applidium.com/en/news/headerlistview_for_android/

的邏輯是一樣的iOS和執行大部分的腿工作,爲您

+0

如果你去他們的github回購,該項目已被標記爲不推薦使用:https://github.com/applidium/HeaderListView – ThomasW

0

你可以看看到SectionedMergeAdapter。如果您有多個數據子列表,您可以將它們拼接在一起併爲它們設置標題。

示例代碼 -

ListView listView = (ListView) findViewById(android.R.id.list); 

ArrayAdapter<Integer> adapter1 = 
     new ArrayAdapter<>(this, R.layout.item_list, android.R.id.text1, arrayList1); 
ArrayAdapter<Integer> adapter2 = 
     new ArrayAdapter<>(this, R.layout.item_list, android.R.id.text1, arrayList2); 
ArrayAdapter<Integer> adapter3 = 
     new ArrayAdapter<>(this, R.layout.item_list, android.R.id.text1, arrayList3); 

TextView tv1 = new TextView(this); 
tv1.setText("Header 1"); 
TextView tv2 = new TextView(this); 
tv2.setText("Header 2"); 
TextView tv3 = new TextView(this); 
tv3.setText("Header 3"); 

SectionedMergeAdapter adapter = new SectionedMergeAdapter(); 

adapter.addSection(new SectionedMergeAdapter.Section(tv1, adapter1)); 
adapter.addSection(new SectionedMergeAdapter.Section(tv2, adapter2)); 
adapter.addSection(new SectionedMergeAdapter.Section(tv3, adapter3)); 

listView.setAdapter(adapter);