我们有时候会遇到这么一个情况。就是我在一个ListView里面须要显示的东西事实上是有种类之分的。比方我要分冬天,夏天。秋天。春天,然后在这每一个季节以下再去载入各自的条目数据。

还有,比方我们的通讯录。我们须要按A。B,C这种字母顺序分类然后显示。

这个怎么实现呢?

以下我们不用ExpandableListView。而是仅仅用ListView来实现这一显示效果。

MainActivity.java

[java] view
plain
copy

  1. package com.xzq.listviewadapter;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.Window;
  5. import android.widget.ListView;
  6. public class MainActivity extends Activity {
  7. private String[] string = { "A", "B", "C", "D", "E", "F", "G", "H", "I",
  8. "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
  9. "W", "X", "Y", "Z" };
  10. /** Called when the activity is first created. */
  11. @Override
  12. public void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. requestWindowFeature(Window.FEATURE_NO_TITLE);
  15. setContentView(R.layout.main);
  16. ListView listview = (ListView) findViewById(R.id.listview);
  17. MyCustomAdapter adapter = new MyCustomAdapter(this);
  18. int size = string.length;
  19. for (int i = 0; i < size; i++) {
  20. adapter.addSeparatorItem(string[i]);
  21. for (int k = 0; k < 5; k++) {
  22. adapter.addItem("item " + k);
  23. }
  24. }
  25. listview.setAdapter(adapter);
  26. }
  27. }

MyCustomAdapter.java

[java] view
plain
copy

  1. package com.xzq.listviewadapter;
  2. import java.util.ArrayList;
  3. import java.util.TreeSet;
  4. import android.content.Context;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.BaseAdapter;
  9. import android.widget.TextView;
  10. public class MyCustomAdapter extends BaseAdapter {
  11. private static final int TYPE_ITEM = 0;
  12. private static final int TYPE_SEPARATOR = 1;
  13. private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;
  14. private ArrayList<String> data = new ArrayList<String>();
  15. private LayoutInflater inflater;
  16. private TreeSet<Integer> set = new TreeSet<Integer>();
  17. public MyCustomAdapter(Context context) {
  18. inflater = LayoutInflater.from(context);
  19. }
  20. public void addItem(String item) {
  21. data.add(item);
  22. }
  23. public void addSeparatorItem(String item) {
  24. data.add(item);
  25. set.add(data.size() - 1);
  26. }
  27. public int getItemViewType(int position) {
  28. return set.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
  29. }
  30. @Override
  31. public int getViewTypeCount() {
  32. return TYPE_MAX_COUNT;
  33. }
  34. @Override
  35. public int getCount() {
  36. return data.size();
  37. }
  38. @Override
  39. public Object getItem(int position) {
  40. return data.get(position);
  41. }
  42. @Override
  43. public long getItemId(int position) {
  44. return position;
  45. }
  46. @Override
  47. public View getView(int position, View convertView, ViewGroup parent) {
  48. ViewHolder holder = null;
  49. int type = getItemViewType(position);
  50. if (convertView == null) {
  51. holder = new ViewHolder();
  52. switch (type) {
  53. case TYPE_ITEM:
  54. convertView = inflater.inflate(R.layout.item1, null);
  55. holder.textView = (TextView) convertView
  56. .findViewById(R.id.item1);
  57. break;
  58. case TYPE_SEPARATOR:
  59. convertView = inflater.inflate(R.layout.item2, null);
  60. holder.textView = (TextView) convertView
  61. .findViewById(R.id.item2);
  62. break;
  63. }
  64. convertView.setTag(holder);
  65. } else {
  66. holder = (ViewHolder) convertView.getTag();
  67. }
  68. holder.textView.setText(data.get(position));
  69. return convertView;
  70. }
  71. public static class ViewHolder {
  72. public TextView textView;
  73. }
  74. }

main.xml

[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?

    >

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#ffffff"
  6. android:orientation="vertical" >
  7. <ListView
  8. android:id="@+id/listview"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="@string/hello" />
  12. </LinearLayout>

item1.xml
[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#ffffff"
  6. android:orientation="vertical" >
  7. <TextView
  8. android:id="@+id/item1"
  9. android:layout_width="fill_parent"
  10. android:layout_height="30dip"
  11. android:gravity="center_vertical" />
  12. </LinearLayout>

item2.xml

[html] view
plain
copy

  1. <?

    xml version="1.0" encoding="utf-8"?>

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:id="@+id/item2"
  8. android:layout_width="fill_parent"
  9. android:layout_height="30dip"
  10. android:background="#3c4857"
  11. android:gravity="center_vertical" />
  12. </LinearLayout>

Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)的更多相关文章

  1. 【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

    Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的 ...

  2. android 开发之 ListView 与Adapter 应用实践

    在开发android中,ListView 的应用显得非常频繁,只要需要显示列表展示的应用,可以说是必不可少,下面是记录开发中应用到ListView与Adapter 使用的实例: ListView 所在 ...

  3. Android开发之ListView添加多种布局效果演示

    在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断 ...

  4. Android开发之ListView设置隔行变色

    public class HLCheckAdapter extends BaseAdapter { private List<HuoLiang> list; private Context ...

  5. Android开发之ListView条目批量选择删除

    ListView实现的列表,假设是可编辑,可删除的,一般都要提供批量删除功能,否则的话,一项一项的删除体验非常不好,也给用户带来了非常大的麻烦. 实现效果图 详细实现代码 select.xml 主布局 ...

  6. Android开发之ListView详解 以及简单的listView优化

    ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeig ...

  7. android开发之 listview中的item去掉分割线 隐藏分割线

    有三种方法: 1> 设置android:divider="@null" 2> android:divider="#00000000" #000000 ...

  8. android开发之this.finish()的使用 分类: android 学习笔记 2015-07-18 19:05 30人阅读 评论(0) 收藏

    在一个Activity用完之后应该将之finish掉,但是,之前在学校里自己摸索着开发时并没有太注意这个问题,因为activity无论是否finish掉对功能的影响貌似都不是那么明显(这是读书时候的观 ...

  9. Android开发之ViewPager实现多页面切换及动画效果(仿Android的Launcher效果)

    Android开发中经常会有引导页或者切换页面等效果,本文采用ViewPager结合动画效果来实现仿Launcher以及页面切换的效果.源码地址在文章最后给出下载. 效果图如下:       1.Vi ...

随机推荐

  1. 151. [USACO Dec07] 建造路径

    ★★   输入文件:roads.in   输出文件:roads.out   简单对比 时间限制:1 s   内存限制:128 MB 译 by CmYkRgB123 描述 Farmer John 刚刚得 ...

  2. Spark学习之键值对(pair RDD)操作(3)

    Spark学习之键值对(pair RDD)操作(3) 1. 我们通常从一个RDD中提取某些字段(如代表事件时间.用户ID或者其他标识符的字段),并使用这些字段为pair RDD操作中的键. 2. 创建 ...

  3. 学习一波redis

    作为一名合格的java程序员,做web开发的,除了java,mysql,免不了用到内存数据库redis. 身为一名菜鸟,是时候来一波redis从入门到放弃了,哦不,从入门到精通.. 一.安装部署red ...

  4. Explaining difference between automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout

    automaticallyAdjustsScrollViewInsets:在导航栏透明时用到 In your viewDidLoad method, add if([self respondsToSe ...

  5. MySQL(四)DQL语言——条件查询

    摘要:条件查询:条件表达式,逻辑表达式,模糊查询,like,通配符,转义字符,escape关键字,between and,in,is null,is not null,安全等于. 条件查询语法: SE ...

  6. javascript底层练习

    1.请看下列代码: function F(){ function C(){ return this; } return C(); } var o=new F(); 请问上面的this值指向的是全局对象 ...

  7. 比较常见的几种代理ip类型

    1.HTTP代理服务器 代理服务器英文全称是Proxy Server,他的功能就是代理网络用户去获得网络信息.形象点说:就是网络信息的中转站.通常情况下,网络浏览器直接去连接其他Internet站点取 ...

  8. for循环,字典遍历(一)

    #items(): 返回字典中所有 key.value #keys(): 返回字典中所有 key 的列表 #values():返回字典中所有 value 的列表 my_dict = {'语文':89, ...

  9. MYEclipse Available Memory is low 警告 解决方法

    1,  设置Eclipse内存使用情况 修改eclipse根目录下的eclipse.ini文件 -vmargs  //虚拟机设置 -Xms40m -Xmx256m -XX:PermSize=128M ...

  10. Daydreaming Stockbroker(2016 NCPC 贪心)

    题目: Gina Reed, the famous stockbroker, is having a slow day at work, and between rounds of solitaire ...