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

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

  • onItemClickListener未在自定义ArrayAdapter上触发
  • 在Android上滚动listview时,checkbox未选中
  • Android - ListView没有收到带有可点击链接的文本视图的OnItemClick
  • 很多垃圾收集在一个列表视图
  • 无法使用自定义适配器单击ListView中的项目
  • ListView与LinearLayout
  • 创建可扩展的RecyclerView
  • 列表视图捕捉项目
  • 只要看看这个在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);