首页 > 代码库 > 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>&nbsp;分类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"    />&nbsp;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;    }     }&nbsp;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);     }&nbsp;