首页 > 代码库 > Android中ListView分类
Android中ListView分类
<?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> 分类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" /> 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; } } 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; } }; }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); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。