联系人案例
项目中有用到联系人,就研究了下,参考了别人的demo,并且加上了自己的一些想法跟ui效果.有这方面需求的朋友可以拿去参考一下.
联系人字母排序参考文章,我也是参考他的:http://blog.csdn.net/xiaanming/article/details/12684155
我的项目实现了联系人排序,侧滑可以弹出联系人分组,以及添加联系人,删掉了搜索功能.增加了头像跟电话号码展示.
首先看下效果图片:
1.主MainActivity用来展示SlidingMenu SlidingMenu加载左侧fragment(GroupFragment) 跟 中间的fragment (ContactFragment)
注意: 把ContactFragment对象注入到GroupFragment中,因为点击群组的时候要更新ContactFragment界面.
public class MainActivity extends FragmentActivity {
private SlidingMenu mSlidingMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_main);
initViews();
ImageView showGroup=(ImageView) findViewById(R.id.show_group);
showGroup.setOnClickListener(listener);
ImageView addContact=(ImageView) findViewById(R.id.add_contact);
addContact.setOnClickListener(listener);
}
private void initViews() {
mSlidingMenu = (SlidingMenu) findViewById(R.id.slidingmenu);
mSlidingMenu.setContent(R.layout.contact_fragment);//中间布局
mSlidingMenu.setMenu(R.layout.group_fragment);//左边布局
ContactFragment contactFragment=new ContactFragment();
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
ft.replace(R.id.contacts_fragment,contactFragment);
ft.replace(R.id.group_fragment,new GroupFragment(contactFragment));
ft.commit();
}
private OnClickListener listener=new OnClickListener() {
@Override
public void onClick(View v){
switch (v.getId()) {
case R.id.show_group:
mSlidingMenu.toggle();//动态判断自动关闭或开启SlidingMenu
break;
case R.id.add_contact:
Intent intent = new Intent(Intent.ACTION_INSERT,Contacts.CONTENT_URI);
startActivityForResult(intent,108);
break;
}
}
};
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (108 == requestCode){
Toast.makeText(MainActivity.this, "如果操作数据,请重新打开联系人...",Toast.LENGTH_LONG).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mSlidingMenu.isMenuShowing()) {
mSlidingMenu.showContent();
return true;
}
return super.onKeyUp(keyCode, event);
}
}2. ContactFragment (中间内容显示的fragment) 初始化显示所有联系人.
给SideBar添加监听事件,dialog的注入,ListView注入adapter,很简单的,相信大家都能看懂
public class ContactFragment extends Fragment implements GroupItemClick{
private List<SWWContact> contactList;
private Activity activity;
private ListView sortListView;
private ContactsAdapter adapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i("fragment","onCreateView:"+getClass().getSimpleName());
activity=getActivity();
View mView = inflater.inflate(R.layout.contact_list, null);
SideBar sideBar = (SideBar) mView.findViewById(R.id.sidrbar);
TextView dialog = (TextView) mView.findViewById(R.id.dialog);
sideBar.setTextView(dialog);
//为ListView设置adapter
sortListView = (ListView) mView.findViewById(R.id.country_lvcountry);
contactList=SWWContactDB.findAllContacts(activity.getContentResolver());
adapter = new ContactsAdapter(activity,contactList);
sortListView.setAdapter(adapter);
//设置右侧触摸监听
sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {
@Override
public void onTouchingLetterChanged(String s) {
//该字母首次出现的位置
int position = adapter.getPositionForSection(s.charAt(0));
if(position != -1){
sortListView.setSelection(position);
}
}
});
return mView;
}
@Override
public void itemClick(List<SWWContact> contacts) {
adapter.updateListView(contacts);
}
}
3.GroupFragment 展示左侧群组数据,加载所有群组,以及群组点击事件,刷新右边联系人.
@SuppressLint("ValidFragment")
public class GroupFragment extends Fragment {
private Activity activity;
private List<SWWContactsGroup> groupList=new ArrayList<SWWContactsGroup>();
private GroupItemClick groupClick;
public GroupFragment(){
}
public GroupFragment(GroupItemClick groupClick){
this.groupClick=groupClick;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.i("fragment", "onCreateView:"+getClass().getSimpleName());
activity=getActivity();
this.groupList = SWWContactDB.queryGroup(activity);//得到所有组数据
View view = inflater.inflate(R.layout.group_list, null);
ListView groupListView=(ListView)view.findViewById(R.id.group_list);
groupListView.setAdapter(new MyAdapter());
return view;
}
/**
* 左侧联系人分组 点击回调接口
*/
public interface GroupItemClick{
public void itemClick(List<SWWContact> contacts);
}
private class MyAdapter extends BaseAdapter{
private boolean isPressed[];
public MyAdapter(){
if(groupList.size()>0){
isPressed = new boolean[groupList.size()];
isPressed[0]=true;
}
}
@Override
public int getCount() {
return groupList.size();
}
@Override
public Object getItem(int position) {
return groupList.get(position);
}
@Override
public long getItemId(int position) {
return groupList.get(position).getGroupId();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(null==convertView){
holder=new ViewHolder();
convertView=View.inflate(activity,R.layout.group_list_item, null);
holder.groupName=(TextView) convertView.findViewById(R.id.group_name);
convertView.setTag(holder);
}else{
holder=(ViewHolder) convertView.getTag();
}
holder.groupName.setText(groupList.get(position).getGroupName());
holder.groupName.setBackgroundResource(isPressed[position]==true?R.color.light_blue:R.color.group_list);
holder.groupName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
changeState(position);
notifyDataSetChanged();
if(position==0){//点击全部按钮
groupClick.itemClick(SWWContactDB.findAllContacts(activity.getContentResolver()));
}else{
int groupId=groupList.get(position).getGroupId();
groupClick.itemClick(SWWContactDB.queryGroupMember(groupId,activity));
}
}
});
return convertView;
}
private void changeState(int position){
isPressed=new boolean[isPressed.length];
isPressed[position] = true;
}
private class ViewHolder{
private TextView groupName;
}
}
}还有一些访问数据库, 以及一些工具类,我就不一一贴出来了,需要的要自己去下载源码......如果大家有什么疑问,请在下面留言.

浙公网安备 33010602011771号