转载:http://blog.csdn.net/z_guijin/article/details/6630620
. 引言
在Android开发过程中往往有这样的需求,将ListView中的内容按年,月,日进行分类显示,要实现这样的效果我们可能有很多种方法,
如:多ListView拼合,自定义ListView组件等,下面介绍一种比较简单,而且实现结构清晰的实现方式,效果图及实现如下。
2. 效果图
3. 功能实现
(1) 主布局(main.xml)实现:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > <ListView android:id = "@+id/categoryList" android:layout_width = "fill_parent" android:layout_height = "fill_parent" /> </LinearLayout>
(2) 主Activity实现:
package com.flora; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class ListViewCategoryActivity extends Activity { private String [] mContacts = {"马英才", "张三", "李四"}; private String [] mMusic = {"素顔", "庐州月", "半城烟沙"}; private String [] mEBook = {"拆掉思维里的墙", "淡定力", "人脉决定命脉"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mCategoryAdapter.addCategory("人名", new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mContacts)); mCategoryAdapter.addCategory("音乐",new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mMusic)); mCategoryAdapter.addCategory("书籍",new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mEBook)); ListView categoryList = (ListView) findViewById(R.id.categoryList); categoryList.setAdapter(mCategoryAdapter); } private CategoryAdapter mCategoryAdapter = new CategoryAdapter() { @Override protected View getTitleView(String title, int index, View convertView, ViewGroup parent) { TextView titleView; if (convertView == null) { titleView = (TextView)getLayoutInflater().inflate(R.layout.title, null); } else { titleView = (TextView)convertView; } titleView.setText(title); return titleView; } }; }
(3) Adapter实现:
package com.flora; import java.util.ArrayList; import java.util.List; import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.BaseAdapter; public abstract class CategoryAdapter extends BaseAdapter { private List<Category> categories = new ArrayList<Category>(); public void addCategory(String title, Adapter adapter) { categories.add(new Category(title, adapter)); } @Override public int getCount() { int total = 0; for (Category category : categories) { total += category.getAdapter().getCount() + 1; } return total; } @Override public Object getItem(int position) { for (Category category : categories) { if (position == 0) { return category; } int size = category.getAdapter().getCount() + 1; if (position < size) { return category.getAdapter().getItem(position-1); } position -= size; } return null; } @Override public long getItemId(int position) { return position; } public int getViewTypeCount() { int total = 1; for (Category category : categories) { total += category.getAdapter().getViewTypeCount(); } return total; } public int getItemViewType(int position) { int typeOffset = 1; for (Category category : categories) { if (position == 0) { return 0; } int size = category.getAdapter().getCount() + 1; if (position < size) { return typeOffset + category.getAdapter().getItemViewType(position - 1); } position -= size; typeOffset += category.getAdapter().getViewTypeCount(); } return -1; } @Override public View getView(int position, View convertView, ViewGroup parent) { int categoryIndex = 0; for (Category category : categories) { if (position == 0) { return getTitleView(category.getTitle(), categoryIndex,convertView, parent); } int size = category.getAdapter().getCount()+1; if (position < size) { return category.getAdapter().getView(position - 1, convertView, parent); } position -= size; categoryIndex++; } return null; } protected abstract View getTitleView(String caption,int index,View convertView,ViewGroup parent); }
(4) 分类ValueBean实现:
package com.flora; import android.widget.Adapter; public class Category { private String mTitle; private Adapter mAdapter; public Category(String title, Adapter adapter) { mTitle = title; mAdapter = adapter; } public void setTile(String title) { mTitle = title; } public String getTitle() { return mTitle; } public void setAdapter(Adapter adapter) { mAdapter = adapter; } public Adapter getAdapter() { return mAdapter; } }
(5) 分类Title实现:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" android:minHeight = "30dip" android:gravity = "center_vertical" android:paddingLeft = "10dip" android:background = "@color/title_background_color" />
相关推荐
这种效果通常涉及到对数据的分类和自定义适配器的使用,以便在ListView中创建可折叠和展开的分组。 首先,我们要理解ListView的工作原理。ListView通过Adapter来获取数据并将其转化为视图(View)显示在界面上。...
"listview分类显示"这个主题,主要探讨的是如何在ListView中实现数据的分组和分类展示。 首先,我们需要理解ListView的基本结构。ListView由多个ListView项(ListView Item)组成,每个项通常对应数据集中的一个...
在Android开发中,"大众点评分类双Listview展示"是一个常见的设计模式,它主要用于呈现具有层次结构的数据。这种设计能够使用户更容易地浏览和理解大量的信息,尤其在餐饮、旅游等场景下,用户通常需要根据不同的...
在Windows桌面应用开发中,`ListView`控件是常用的一种数据展示组件,它允许开发者以列表形式展示数据,包括各种视图(如大图标、小图标、列表、详细信息等)。在这个项目中,"ListView 列表展示、分组、国家图标...
实现ListView分类的关键在于重写Adapter的以下方法: 1. `getItemViewType(int position)`:此方法返回给定位置的列表项的类型标识。根据数据源中的数据类型,我们可以返回不同的整数值,表示不同类型的视图。 2. ...
在Android开发中,ListView是一种常用的UI组件,用于展示大量数据列表。它允许用户滚动查看多个条目,并且可以通过适配器(Adapter)进行数据绑定。然而,当数据需要按照特定类别或分组显示时,单纯的ListView可能...
在这个"android listview+fragment实现仿京东分类"项目中,我们将探讨如何利用这两种组件来模仿京东应用中的商品分类功能。以下是相关知识点的详细说明: 1. **ListView**: ListView是Android SDK提供的一种视图...
在Android开发中,ListView是用于显示大量数据列表的一个核心组件,尤其适用于展示具有多项条目的数据集合。...学习这个例子有助于开发者更好地理解和应用ListView分类,提高用户体验,特别是在展示大量结构化数据时。
在Android开发中,二级分类列表通常用于展示具有层次结构的数据,比如应用商店的分类、论坛板块等。在本场景中,我们关注的是如何实现一个基于ListView的二级分类列表。ListView作为Android中的一个基础组件,是展示...
当用户在左侧的ListView中选择不同的分类时,右侧的ListView会实时更新,展示对应分类下的商品。 3. **监听事件**: 实现联动的关键在于监听ListView的点击事件。我们可以为ListView的每个条目设置OnClickListener...
这个压缩包提供的就是一个ExpandableListView的实例,帮助开发者理解和实践如何在Android应用中实现多级菜单的分类展示。 首先,我们要理解ExpandableListView的基本概念。它扩展了ListView的功能,允许每个列表项...
本教程将深入讲解如何实现一个简单的ListView分类,帮助开发者更好地理解和运用这一功能。 一、ListView概述 ListView是Android SDK中的一个视图组件,主要用于显示一列可滚动的项目列表。每个列表项可以通过自定义...
然而,有时我们可能需要构建更复杂的界面,比如包含多级分类的数据结构,这时就需要用到ListView的嵌套。"ListView 嵌套 ListView demo"就是一个示例,展示了如何在主ListView中嵌入子ListView来实现二级列表的效果...
总结来说,优化ListView主要在于提高滚动时的流畅性,减少不必要的资源消耗,而分类显示则需要灵活运用Adapter和数据结构,创建不同类型的View来展示不同的数据。这两者结合,可以让用户在使用应用时有更好的体验。...
在“仿百度外卖、美团外卖、淘点点等”的场景中,ListView被用来展示餐厅分类或者菜品类别,通常每个条目都是一个可点击的项,点击后会触发相应的动作,比如展开子菜单或跳转到详细页面。 左右联动的效果是指当用户...
在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。在“带分类的ListView”场景下,我们通常需要实现类似微信通讯录那样的功能,即数据项按字母顺序分组并显示在左侧边栏,点击边栏字母可快速...
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常用于实现滚动效果。这个简单的ListView用法例子将帮助初学者理解和掌握如何在实际项目中运用ListView。 首先,我们来了解一下...
ListView是Android平台上一个非常重要的组件,它用于展示大量的数据列表,是应用开发中常见的视图控件。在处理大量数据时,如果不进行优化,ListView可能会出现性能问题,如滚动卡顿、内存消耗过大等。因此,对...
- **设置菜单**:在设置菜单中,外部ListView展示大的分类,内部ListView展示该分类下的具体设置项。 ### 嵌套ListView的性能优化 嵌套ListView在性能上可能会有较大的消耗,尤其是当数据量较大时。为了优化性能,...