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

我想要像在联系人应用程序一样在android listview中绘制部分标题。 当列表视图被拖动的部分标题将平躺,谢谢。

Solutions Collecting From Web of "如何在android listview中绘制一个节头,就像ios的UITableview一样?"

只要看看这个在ListViews中的Android分段头 ,它很好地描述了如何在ListViews中实现分段头。

Android的惊人,列表视图

Jeff Sharkey的SeparatedListAdapter

MergeAdapter by CommonsWare

谢谢。

在列表项目布局中创build一个HEADER布局。 我们使用VISIBILITY选项来显示和隐藏HEADER LAYOUT。 这将像一个部分标题。

在适配器“getView”方法中,检查“名称字段(在您显示的名称符合的情况下)”的第一个字母,并使用前一个LIST ITEMS“名称字段”的第一个字母。 如果它隐藏了HEADER LAYOUT(带有文本视图),那么用标题文本显示HEADER LAYOUT,显示名称字段的第一个字母。

这是代码

String nameFirstLetter =“A”; //全局声明,而不是在getView中。

//里面的getViewstringnameF = 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中的一些例子可以解决这个问题:请find有关PinnedHeaderListView的例子PinnedHeaderListView示例

如果有人需要不同的解决scheme,特别是那些更习惯于iOS开发的解决scheme,则更喜欢它,或者想要模仿iOS的外观和感觉; 我build议如下:

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

这个逻辑和iOS一样,并且为你做了大部分的工作

你可以看看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);