Android中Listview分类显示数据
来源:互联网 发布:淘宝客服电话是五视频 编辑:程序博客网 时间:2024/05/21 22:25
一, 概述
在Android开发中,很多时候会有这样的需求,在数据列表中,按类型来分模块来展示数据,比如联系人列表就是一个非常典型的例子,我们往往会按照姓氏来显示联系人电话列表,这种数据展示的方式非常简单明了,方便,这种效果的实现其实非常简单,下面就从源码对其进行剖析。
二,实现过程
1,效果图:
2.创建一个实体类,包含两个属性:(1)分类名;(2)分类数据:
源码:
public class Category { private Adapter mAdapter; private String mTitle; public Category() { } public Category(Adapter mAdapter, String mTitle) { this.mAdapter = mAdapter; this.mTitle = mTitle; } public Adapter getmAdapter() { return mAdapter; } public void setmAdapter(Adapter mAdapter) { this.mAdapter = mAdapter; } public String getmTitle() { return mTitle; } public void setmTitle(String mTitle) { this.mTitle = mTitle; }}
这里非常简单,不做任何解释.
2.自定义适配器,这是这个实例中最关键的一部分:
直接贴上源码:
public abstract class CategoryAdapter extends BaseAdapter{ //用于存储分类和类型数据的集合,这里每一个对象为一个分类和其相对应的数据。 private List<Category> categories=new ArrayList(); public void addCategery(String title,Adapter adapter){ categories.add(new Category(adapter,title)); } @Override public int getCount() { int total=0; for (Category category:categories){ total=total+category.getmAdapter().getCount()+1; } return total; } @Override public Object getItem(int position) { return categories.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { for (Category category:categories){ //如果是第一个,则显示分类的名称 if (position == 0){ return getTitleView(category.getmTitle(),convertView,parent); } //否则显示子分类的名称 //每个分类加上其子类的数量 int size=category.getmAdapter().getCount()+1; if (position < size){ return category.getmAdapter().getView(position-1,convertView,parent); } //当position为0时,说明一个分类的数据已经展示完毕,紧接着展示下一个分类的数据 position=position-size; } return null; } //获取分类数据视图的方法,OOP的思想,留给子类实现该方法, public abstract View getTitleView(String caption, View convertView, ViewGroup parent);}
3.布局,这里为了方便,没有做太复杂的布局:
主页面的布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="mzbemployeeapp.wellke.com.listviewtypedemo.MainActivity"> <ListView android:id="@+id/list_view" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>
分类标题的布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView 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" android:id="@+id/title" /></LinearLayout>
4,在Activity初始化数据,并将数据进行展示。
public class MainActivity extends Activity { ListView listView; String places[]=new String[]{"北京","上海","杭州","深圳","广州","南京"}; String langlue[]=new String[]{"C++","java","js","html5","C#","framework","J2ee"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); }//初始化数据 private void init() { listView=(ListView)findViewById(R.id.list_view); adapter.addCategery("地域",new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,places)); adapter.addCategery("开发语言",new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,langlue)); listView.setAdapter(adapter); } CategoryAdapter adapter=new CategoryAdapter() { @Override public View getTitleView(String caption, View convertView, ViewGroup parent) { if (convertView == null){ convertView= LayoutInflater.from(MainActivity.this).inflate(R.layout.title_item,parent,false); } ((TextView)convertView.findViewById(R.id.title)).setText(caption); return convertView; } };}
到这里,整个实现过程已经结束,如有任何疑问和好的想法,请进行留言。
1 0
- Android中Listview分类显示数据
- Android:ListView分类显示
- 三、ListView数据分类显示
- Android中ListView分类
- Android中ListView分类
- Android中ListView分类
- android中listview显示传感器数据
- android ListView数据显示
- Android ListView数据显示
- Android Listview数据显示
- Android之listview优化+分类显示
- 在ListView中显示分类字母标题
- Android开发中ListView数据更新显示的解决方法
- Android ListView 分类显示(一)单布局显示
- Android ListView 分类显示(二)多布局显示
- ListView分类显示
- Android数据的分页 listview显示数据
- Android中ListView气泡显示
- .net mvc 分页,pagedlist,mvcpager
- VGA timing (转)
- 工厂模式的学习笔记
- GBK编码文件转UTF-8编码使用vim
- ./configure详解
- Android中Listview分类显示数据
- Maven 整合 spring profile实现多环境自动切换
- Maven实战(五)坐标详解
- AFNetworking简单封装
- ACM中好用的SET
- oracle--PL/SQL基础语法
- Oracle Grouping、Rollup 的简单用法
- linux系统中GPIO的设置
- Android使用系统签名以及安装