Android中ListView分类
2019独角兽企业重金招聘Python工程师标准>>>
1. 引言
在Android开发过程中往往有这样的需求,将ListView中的内容按年,月,日进行分类显示,要实现这样的效果我们可能有很多种方法,
如:多ListView拼合,自定义ListView组件等,下面介绍一种比较简单,而且实现结构清晰的实现方式,效果图及实现如下。
2. 效果图
3. 功能实现
(1) 主布局(main.xml)实现:
[java] view plaincopy
<?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实现:
[java] view plaincopy
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实现:
[java] view plaincopy
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实现:
[java] view plaincopy
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实现:
[java] view plaincopy
<?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"
/>
转载于:https://my.oschina.net/yuanxulong/blog/532888
Android中ListView分类相关推荐
- android中ListView控件onItemClick事件中获取listView传递的数据
http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...
- android listview 数据同步,android中ListView数据刷新时的同步方法
本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: public class Main extends BaseActivity { priv ...
- Android中ListView选中事件setOnItemSelectedListener无反应不生效问题
Android中ListView选中事件setOnItemSelectedListener无反应不生效问题 在学习Android中ListView组件时,android模拟器运行app时,发现点击有反 ...
- android listview 分析,Android中ListView用法实例分析
本文实例分析了Android中ListView用法.分享给大家供大家参考,具体如下: 通过在Layout中添加ListView Widget可以达到在页面布局具有列表效果的交互页面.在这里通过举例来说 ...
- android listview高级,Android中Listview点赞功能的实现
最近这段时间一直在看Android,利用Listview去实现点赞功能,下面给大家介绍下基本思路. 基本思路: 进入界面–>获取数据–> 在Listview中显示–> 通过map集合 ...
- Android中Listview(七)--排序ListView
ListView的A-Z字母排序和过滤搜索功能并且实现汉字转成拼音的功能,我们知道一般我们对联系人,城市列表等实现A-Z的排序,因为联系人和城市列表我们可以直接从数据库中获取他的汉字拼音,而对于 ...
- Android中ListView的使用以及使用适配器设置数据源
场景 Android中使用Adapter(适配器)给RecycleView设置数据源: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...
- android中的 listview,Android中ListView的初步认识(一)
ListView是安卓开发中常用的组件之一,它的作用是在一个垂直的列表中展现出所需的项目.接下来,我们看一下ListView的实现方法: 第一种 是常见的在XML中定义然后在activity中使用fi ...
- android xml 列表展示,Android中ListView实现展示列表数据
1.在activity_main.xml中添加一个ListView xmlns:tools="http://schemas.android.com/tools" android:l ...
最新文章
- 第29月第21天 ios android curl
- Hbase常用操作(增删改查)
- [翻译]pytest测试框架(一)
- Leetcode987 二叉树的垂序遍历
- 2011年想要惊喜的5z20
- mysql是什么1001mysql是什么_mysql深入理解
- 【1.Delphi基础】1.Delphi程序设计入门
- ectouch微信支付,带微信H5支付
- arcgis怎么压缩tif文件_怎么压缩PDF文件?快来试试这些工具!
- 测试大纲法与 场景法
- cad怎么把图层英文变成中文_CAD图层中英文对照表.pdf
- 把sql中的image数据在网页中显示成图片
- 在持续集成 (CI) 环境中使用 Android 模拟器 | AndroidDevSummit 中文字幕视频
- Unity Live2D 通过脚本播放动画 Motion Controller 学习使用
- HBase数据模型与整体架构
- Planned Delivery Time Calculation
- 神经网络论文研究-图像处理方向3-resnet-残差网络
- 关于阿里矢量图iconfont的应用
- 这些是源自几米的句子,让人满心感触……
- Python:统计数字
热门文章
- 在VS2008中调用Matlab的m文件(转)
- 007 [转载]国际域名意义查询
- 基于backtrader的唐奇安结合ADX策略实现(自动多参数调优和回测)
- ansible的介绍与安装
- 项目场景:对接支付宝支付,沙箱环境提示:支付存在钓鱼风险!防钓鱼网站的方法
- php编程数学思维题,小学一年级数学思维训练100题打印版.doc
- python 双色球数学组合公式_Python实现的双色球生成功能示例
- Dynamics CRM 附件功能
- 回眸一笑百媚生,六宫粉黛无颜色——python面向对象基础
- Android开发本地及网络Mp3音乐播放器之网络音乐下载功能实现