android 开发 添加分组和联系人,android 支持分组和联系人展示的一个小例子

先看效果图:

7c4a3dcff56f9ce3001d796849623c86.png

要实现这个效果,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

ContactTreeAdapter contactTreeAdapter = new ContactTreeAdapter(

groupCursor, this, true, mContactDataBase);

setListAdapter(contactTreeAdapter);

}

主要实现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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值