2019独角兽企业重金招聘Python工程师标准>>>

1. 引言

在Android开发过程中往往有这样的需求,将ListView中的内容按年,月,日进行分类显示,要实现这样的效果我们可能有很多种方法,

如:多ListView拼合,自定义ListView组件等,下面介绍一种比较简单,而且实现结构清晰的实现方式,效果图及实现如下。

2. 效果图

3. 功能实现

(1) 主布局(main.xml)实现:

[java] view plaincopy

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

  2. <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

  3. android:orientation = "vertical"

  4. android:layout_width = "fill_parent"

  5. android:layout_height = "fill_parent"

  6. >

  7. <ListView

  8. android:id = "@+id/categoryList"

  9. android:layout_width = "fill_parent"

  10. android:layout_height = "fill_parent"

  11. />

  12. </LinearLayout>

(2) 主Activity实现:

[java] view plaincopy

  1. package com.flora;

  2. import android.app.Activity;

  3. import android.os.Bundle;

  4. import android.view.View;

  5. import android.view.ViewGroup;

  6. import android.widget.ArrayAdapter;

  7. import android.widget.ListView;

  8. import android.widget.TextView;

  9. public class ListViewCategoryActivity extends Activity {

  10. private String [] mContacts = {"马英才", "张三", "李四"};

  11. private String [] mMusic = {"素顔", "庐州月", "半城烟沙"};

  12. private String [] mEBook = {"拆掉思维里的墙", "淡定力", "人脉决定命脉"};

  13. @Override

  14. public void onCreate(Bundle savedInstanceState) {

  15. super.onCreate(savedInstanceState);

  16. setContentView(R.layout.main);

  17. mCategoryAdapter.addCategory("人名", new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mContacts));

  18. mCategoryAdapter.addCategory("音乐",new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mMusic));

  19. mCategoryAdapter.addCategory("书籍",new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mEBook));

  20. ListView categoryList = (ListView) findViewById(R.id.categoryList);

  21. categoryList.setAdapter(mCategoryAdapter);

  22. }

  23. private CategoryAdapter mCategoryAdapter = new CategoryAdapter() {

  24. @Override

  25. protected View getTitleView(String title, int index, View convertView, ViewGroup parent) {

  26. TextView titleView;

  27. if (convertView == null) {

  28. titleView = (TextView)getLayoutInflater().inflate(R.layout.title, null);

  29. } else {

  30. titleView = (TextView)convertView;

  31. }

  32. titleView.setText(title);

  33. return titleView;

  34. }

  35. };

  36. }

(3) Adapter实现:

[java] view plaincopy

  1. package com.flora;

  2. import java.util.ArrayList;

  3. import java.util.List;

  4. import android.view.View;

  5. import android.view.ViewGroup;

  6. import android.widget.Adapter;

  7. import android.widget.BaseAdapter;

  8. public abstract class CategoryAdapter extends BaseAdapter {

  9. private List<Category> categories = new ArrayList<Category>();

  10. public void addCategory(String title, Adapter adapter) {

  11. categories.add(new Category(title, adapter));

  12. }

  13. @Override

  14. public int getCount() {

  15. int total = 0;

  16. for (Category category : categories) {

  17. total += category.getAdapter().getCount() + 1;

  18. }

  19. return total;

  20. }

  21. @Override

  22. public Object getItem(int position) {

  23. for (Category category : categories) {

  24. if (position == 0) {

  25. return category;

  26. }

  27. int size = category.getAdapter().getCount() + 1;

  28. if (position < size) {

  29. return category.getAdapter().getItem(position-1);

  30. }

  31. position -= size;

  32. }

  33. return null;

  34. }

  35. @Override

  36. public long getItemId(int position) {

  37. return position;

  38. }

  39. public int getViewTypeCount() {

  40. int total = 1;

  41. for (Category category : categories) {

  42. total += category.getAdapter().getViewTypeCount();

  43. }

  44. return total;

  45. }

  46. public int getItemViewType(int position) {

  47. int typeOffset = 1;

  48. for (Category category : categories) {

  49. if (position == 0) {

  50. return 0;

  51. }

  52. int size = category.getAdapter().getCount() + 1;

  53. if (position < size) {

  54. return typeOffset + category.getAdapter().getItemViewType(position - 1);

  55. }

  56. position -= size;

  57. typeOffset += category.getAdapter().getViewTypeCount();

  58. }

  59. return -1;

  60. }

  61. @Override

  62. public View getView(int position, View convertView, ViewGroup parent) {

  63. int categoryIndex = 0;

  64. for (Category category : categories) {

  65. if (position == 0) {

  66. return getTitleView(category.getTitle(), categoryIndex,convertView, parent);

  67. }

  68. int size = category.getAdapter().getCount()+1;

  69. if (position < size) {

  70. return category.getAdapter().getView(position - 1, convertView, parent);

  71. }

  72. position -= size;

  73. categoryIndex++;

  74. }

  75. return null;

  76. }

  77. protected abstract View getTitleView(String caption,int index,View convertView,ViewGroup parent);

  78. }

(4) 分类ValueBean实现:

[java] view plaincopy

  1. package com.flora;

  2. import android.widget.Adapter;

  3. public class Category {

  4. private String mTitle;

  5. private Adapter mAdapter;

  6. public Category(String title, Adapter adapter) {

  7. mTitle = title;

  8. mAdapter = adapter;

  9. }

  10. public void setTile(String title) {

  11. mTitle = title;

  12. }

  13. public String getTitle() {

  14. return mTitle;

  15. }

  16. public void setAdapter(Adapter adapter) {

  17. mAdapter = adapter;

  18. }

  19. public Adapter getAdapter() {

  20. return mAdapter;

  21. }

  22. }

(5) 分类Title实现:

[java] view plaincopy

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

  2. <TextView

  3. xmlns:android = "http://schemas.android.com/apk/res/android"

  4. android:layout_width = "match_parent"

  5. android:layout_height = "match_parent"

  6. android:minHeight = "30dip"

  7. android:gravity = "center_vertical"

  8. android:paddingLeft = "10dip"

  9. android:background = "@color/title_background_color"

  10. />

转载于:https://my.oschina.net/yuanxulong/blog/532888

Android中ListView分类相关推荐

  1. android中ListView控件onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

  2. android listview 数据同步,android中ListView数据刷新时的同步方法

    本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: public class Main extends BaseActivity { priv ...

  3. Android中ListView选中事件setOnItemSelectedListener无反应不生效问题

    Android中ListView选中事件setOnItemSelectedListener无反应不生效问题 在学习Android中ListView组件时,android模拟器运行app时,发现点击有反 ...

  4. android listview 分析,Android中ListView用法实例分析

    本文实例分析了Android中ListView用法.分享给大家供大家参考,具体如下: 通过在Layout中添加ListView Widget可以达到在页面布局具有列表效果的交互页面.在这里通过举例来说 ...

  5. android listview高级,Android中Listview点赞功能的实现

    最近这段时间一直在看Android,利用Listview去实现点赞功能,下面给大家介绍下基本思路. 基本思路: 进入界面–>获取数据–> 在Listview中显示–> 通过map集合 ...

  6. Android中Listview(七)--排序ListView

     ListView的A-Z字母排序和过滤搜索功能并且实现汉字转成拼音的功能,我们知道一般我们对联系人,城市列表等实现A-Z的排序,因为联系人和城市列表我们可以直接从数据库中获取他的汉字拼音,而对于 ...

  7. Android中ListView的使用以及使用适配器设置数据源

    场景 Android中使用Adapter(适配器)给RecycleView设置数据源: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  8. android中的 listview,Android中ListView的初步认识(一)

    ListView是安卓开发中常用的组件之一,它的作用是在一个垂直的列表中展现出所需的项目.接下来,我们看一下ListView的实现方法: 第一种 是常见的在XML中定义然后在activity中使用fi ...

  9. android xml 列表展示,Android中ListView实现展示列表数据

    1.在activity_main.xml中添加一个ListView xmlns:tools="http://schemas.android.com/tools" android:l ...

最新文章

  1. 第29月第21天 ios android curl
  2. Hbase常用操作(增删改查)
  3. [翻译]pytest测试框架(一)
  4. Leetcode987 二叉树的垂序遍历
  5. 2011年想要惊喜的5z20
  6. mysql是什么1001mysql是什么_mysql深入理解
  7. 【1.Delphi基础】1.Delphi程序设计入门
  8. ectouch微信支付,带微信H5支付
  9. arcgis怎么压缩tif文件_怎么压缩PDF文件?快来试试这些工具!
  10. 测试大纲法与 场景法
  11. cad怎么把图层英文变成中文_CAD图层中英文对照表.pdf
  12. 把sql中的image数据在网页中显示成图片
  13. 在持续集成 (CI) 环境中使用 Android 模拟器 | AndroidDevSummit 中文字幕视频
  14. Unity Live2D 通过脚本播放动画 Motion Controller 学习使用
  15. HBase数据模型与整体架构
  16. Planned Delivery Time Calculation
  17. 神经网络论文研究-图像处理方向3-resnet-残差网络
  18. 关于阿里矢量图iconfont的应用
  19. 这些是源自几米的句子,让人满心感触……
  20. Python:统计数字

热门文章

  1. 在VS2008中调用Matlab的m文件(转)
  2. 007 [转载]国际域名意义查询
  3. 基于backtrader的唐奇安结合ADX策略实现(自动多参数调优和回测)
  4. ansible的介绍与安装
  5. 项目场景:对接支付宝支付,沙箱环境提示:支付存在钓鱼风险!防钓鱼网站的方法
  6. php编程数学思维题,小学一年级数学思维训练100题打印版.doc
  7. python 双色球数学组合公式_Python实现的双色球生成功能示例
  8. Dynamics CRM 附件功能
  9. 回眸一笑百媚生,六宫粉黛无颜色——python面向对象基础
  10. Android开发本地及网络Mp3音乐播放器之网络音乐下载功能实现