android 支持分组和联系人展示的一个小例子

jopen 10年前

先看效果图:

20140727214644760.jpg

 

 

要实现这个效果,activity必须实现ExpandableListActivity

    @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            requestWindowFeature(Window.FEATURE_NO_TITLE);            setContentView(R.layout.main);            mContactListView = getExpandableListView();            mContactListView.setBackgroundResource(R.drawable.default_bg);            registerForContextMenu(mContactListView);            mContactDataBase = ((ContactApplication) getApplication())                    .getmContactDataBase();                    getExpandableListView().setCacheColorHint(0);// 拖动时避免出现黑色            getExpandableListView().setDivider(null);// 去掉每项下面的黑线(分割线)            // 自定义下拉图标            getExpandableListView().setGroupIndicator(                    getResources().getDrawable(R.drawable.expander_ic_folder));            setAdatperForExpandableListView();        }                /**        * 设置ExpandableListView的adapter        */        private void setAdatperForExpandableListView() {            Cursor groupCursor = mContactDataBase.getAllGroups();  //这个是从数据库里查询出所有的组            Util.d(TAG, "groupCursor=" + groupCursor);            // curosr的生命周期将和activity有关            startManagingCursor(groupCursor);                    // set my adapter            <strong>ContactTreeAdapter </strong>contactTreeAdapter = new ContactTreeAdapter(                    groupCursor, this, true, mContactDataBase);            setListAdapter(contactTreeAdapter);        }  
</div> </div>
主要实现ContactTreeAdapter这个adapter

public class ContactTreeAdapter extends CursorTreeAdapter {            /** log tag. */        private static final String TAG = "ContactTreeAdapter";            /** context */        public Context mContext = null;        private Cursor mCursor = null;            private ContactDataBase mContactDataBase;            // contact表字段索引        private static final int INDEX_NAME = 1;        private static final int INDEX_PHONENUMBER = 2;            // group表字段索引        private static final int INDEX_GROUPNAME = 1;            public ContactTreeAdapter(Cursor cursor, Context context,                boolean autoRequery, ContactDataBase contactDataBase) {            super(cursor, context, autoRequery);            mContext = context;            this.mContactDataBase = contactDataBase;            // TODO Auto-generated constructor stub        }            @Override        protected Cursor getChildrenCursor(Cursor groupCursor) {            // TODO Auto-generated method stub            String groupName = groupCursor.getString(INDEX_GROUPNAME);// 得到当前的组名            Cursor childCursor = mContactDataBase.getContactsByGroupName(groupName);            return childCursor;        }            @Override        protected View newGroupView(Context context, Cursor cursor,                boolean isExpanded, ViewGroup parent) {            // TODO Auto-generated method stub            Util.d(TAG, "newGroupView");            LayoutInflater inflate = LayoutInflater.from(mContext);            View view = inflate.inflate(R.layout.grouplayout, null);            bindGroupView(view, context, cursor, isExpanded);            return view;            }            @Override        protected void bindGroupView(View view, Context context, Cursor cursor,                boolean isExpanded) {            // TODO Auto-generated method stub            Util.d(TAG, "bindGroupView");            TextView groupName = (TextView) view.findViewById(R.id.groupName);            String group = cursor.getString(INDEX_GROUPNAME);            groupName.setText(group);                TextView groupCount = (TextView) view.findViewById(R.id.groupCount);            int count = mContactDataBase.getCountContactByGroupName(group);            Util.d(TAG, "count=" + count + "group=" + group);            groupCount.setText("[" + count + "]");        }            @Override        protected View newChildView(Context context, Cursor cursor,                boolean isLastChild, ViewGroup parent) {            // TODO Auto-generated method stub            Util.d(TAG, "newChildView");            LayoutInflater inflate = LayoutInflater.from(mContext);            View view = inflate.inflate(R.layout.childlayout, null);            bindChildView(view, context, cursor, isLastChild);            return view;        }            @Override        protected void bindChildView(View view, Context context, Cursor cursor,                boolean isLastChild) {            // TODO Auto-generated method stub            Util.d(TAG, "bindChildView cursor.getString(INDEX_PHONENUMBER)="                    + cursor.getString(INDEX_PHONENUMBER));            TextView name = (TextView) view.findViewById(R.id.name);            name.setText(cursor.getString(INDEX_NAME));                TextView description = (TextView) view.findViewById(R.id.description);            description.setTextKeepState(cursor.getString(INDEX_PHONENUMBER));        }        }

因为这个adapter的函数命名就可以看出是干什么的就不一一解释了
来自:http://blog.csdn.net/baidu_nod/article/details/38182539