如何像在ios的UITableview中一样在android listview中绘制一个节头?

我想在android listview中绘制一些节头,就像Contacts app一样。 当拖动列表视图时,节标题将会平移,谢谢。

只需在ListViews示例中查看此Android – Sectioned Headers,它就可以很好地描述如何在ListViews中实现Sectioned Headers。

Android的惊人,列表视图

Jeff Sharkey的SeparatedListAdapter

CommonsWare的MergeAdapter

谢谢。

在列表项布局中创建HEADER LAYOUT。 我们使用VISIBILITY选项显示和隐藏HEADER LAYOUT。 这将像节标题。

在适配器“getView”方法中,使用前一个LIST ITEMS“名称字段”的第一个字母检查“名称字段的第一个字母(如果您显示符合名称)”。 如果它在macthes中隐藏HEADER LAYOUT(带有文本视图),则显示HEADER LAYOUT,其中Header Text显示Name Field的第一个字母。

这是代码

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节标题那样工作,即。 当我们向上/向下滚动时,节标题与其他列表项一起隐藏。

我发现Android中的一些例子可以解决这个问题:请查看关于PinnedHeaderListView的示例PinnedHeaderListView示例

如果有人需要一个不同的解决方案,特别是那些更习惯于iOS开发的人,更喜欢它,或者想要模仿iOS的外观和感觉; 我推荐以下内容:

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

逻辑与iOS相同,并为您完成大部分工作

您可以查看SectionedMergeAdapter 。 如果您有多个数据子列表,则可以将它们拼接在一起并为其设置标题。

示例代码 –

 ListView listView = (ListView) findViewById(android.R.id.list); ArrayAdapter adapter1 = new ArrayAdapter<>(this, R.layout.item_list, android.R.id.text1, arrayList1); ArrayAdapter adapter2 = new ArrayAdapter<>(this, R.layout.item_list, android.R.id.text1, arrayList2); ArrayAdapter 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);