联系人案例

简介:

项目中有用到联系人,就研究了下,参考了别人的demo,并且加上了自己的一些想法跟ui效果.有这方面需求的朋友可以拿去参考一下.

联系人字母排序参考文章,我也是参考他的:http://blog.csdn.net/xiaanming/article/details/12684155

我的项目实现了联系人排序,侧滑可以弹出联系人分组,以及添加联系人,删掉了搜索功能.增加了头像跟电话号码展示.

首先看下效果图片:

                                      



1.主MainActivity用来展示SlidingMenu    SlidingMenu加载左侧fragment(GroupFragment)    跟    中间的fragment (ContactFragment)

 注意: 把ContactFragment对象注入到GroupFragment中,因为点击群组的时候要更新ContactFragment界面.

  1. public class MainActivity extends FragmentActivity {  
  2.     private SlidingMenu mSlidingMenu;  
  3.       
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.contact_main);  
  8.           
  9.         initViews();  
  10.           
  11.         ImageView showGroup=(ImageView) findViewById(R.id.show_group);  
  12.         showGroup.setOnClickListener(listener);  
  13.           
  14.         ImageView addContact=(ImageView) findViewById(R.id.add_contact);  
  15.         addContact.setOnClickListener(listener);  
  16.     }  
  17.       
  18.     private void initViews() {  
  19.         mSlidingMenu = (SlidingMenu) findViewById(R.id.slidingmenu);  
  20.           
  21.         mSlidingMenu.setContent(R.layout.contact_fragment);//中间布局  
  22.         mSlidingMenu.setMenu(R.layout.group_fragment);//左边布局  
  23.           
  24.         ContactFragment contactFragment=new ContactFragment();  
  25.           
  26.         FragmentTransaction ft=getSupportFragmentManager().beginTransaction();  
  27.         ft.replace(R.id.contacts_fragment,contactFragment);  
  28.         ft.replace(R.id.group_fragment,new GroupFragment(contactFragment));  
  29.         ft.commit();  
  30.     }  
  31.       
  32.     private OnClickListener listener=new OnClickListener() {  
  33.         @Override  
  34.         public void onClick(View v){  
  35.             switch (v.getId()) {  
  36.             case R.id.show_group:  
  37.                 mSlidingMenu.toggle();//动态判断自动关闭或开启SlidingMenu  
  38.                 break;  
  39.             case R.id.add_contact:  
  40.                 Intent intent = new Intent(Intent.ACTION_INSERT,Contacts.CONTENT_URI);  
  41.                 startActivityForResult(intent,108);  
  42.                 break;  
  43.             }  
  44.         }  
  45.     };  
  46.       
  47.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  48.         if (108 == requestCode){  
  49.             Toast.makeText(MainActivity.this"如果操作数据,请重新打开联系人...",Toast.LENGTH_LONG).show();  
  50.         }  
  51.         super.onActivityResult(requestCode, resultCode, data);  
  52.     }  
  53.   
  54.     @Override  
  55.     public boolean onKeyUp(int keyCode, KeyEvent event) {  
  56.         if (keyCode == KeyEvent.KEYCODE_BACK && mSlidingMenu.isMenuShowing()) {  
  57.             mSlidingMenu.showContent();  
  58.             return true;  
  59.         }  
  60.         return super.onKeyUp(keyCode, event);  
  61.     }  
  62. }  

2.  ContactFragment  (中间内容显示的fragment)    初始化显示所有联系人.

     给SideBar添加监听事件,dialog的注入,ListView注入adapter,很简单的,相信大家都能看懂

  1. public class ContactFragment extends Fragment implements GroupItemClick{  
  2.     private List<SWWContact> contactList;  
  3.     private Activity activity;  
  4.     private ListView sortListView;  
  5.     private ContactsAdapter adapter;  
  6.       
  7.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  8.             Bundle savedInstanceState) {  
  9.         Log.i("fragment","onCreateView:"+getClass().getSimpleName());  
  10.         activity=getActivity();  
  11.         View mView = inflater.inflate(R.layout.contact_list, null);  
  12.           
  13.         SideBar sideBar = (SideBar) mView.findViewById(R.id.sidrbar);  
  14.         TextView dialog = (TextView) mView.findViewById(R.id.dialog);  
  15.         sideBar.setTextView(dialog);  
  16.           
  17.         //为ListView设置adapter  
  18.         sortListView = (ListView) mView.findViewById(R.id.country_lvcountry);  
  19.         contactList=SWWContactDB.findAllContacts(activity.getContentResolver());  
  20.         adapter = new ContactsAdapter(activity,contactList);  
  21.         sortListView.setAdapter(adapter);  
  22.           
  23.         //设置右侧触摸监听  
  24.         sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {  
  25.             @Override  
  26.             public void onTouchingLetterChanged(String s) {  
  27.                 //该字母首次出现的位置  
  28.                 int position = adapter.getPositionForSection(s.charAt(0));  
  29.                 if(position != -1){  
  30.                     sortListView.setSelection(position);  
  31.                 }  
  32.             }  
  33.         });  
  34.         return mView;  
  35.     }  
  36.       
  37.     @Override  
  38.     public void itemClick(List<SWWContact> contacts) {  
  39.         adapter.updateListView(contacts);  
  40.     }  
  41. }  



3.GroupFragment  展示左侧群组数据,加载所有群组,以及群组点击事件,刷新右边联系人.

  1. @SuppressLint("ValidFragment")  
  2. public class GroupFragment extends Fragment {  
  3.     private Activity activity;  
  4.     private List<SWWContactsGroup> groupList=new ArrayList<SWWContactsGroup>();  
  5.       
  6.     private GroupItemClick groupClick;  
  7.       
  8.     public GroupFragment(){  
  9.     }  
  10.       
  11.     public GroupFragment(GroupItemClick groupClick){  
  12.         this.groupClick=groupClick;  
  13.     }  
  14.       
  15.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
  16.         Log.i("fragment""onCreateView:"+getClass().getSimpleName());  
  17.         activity=getActivity();  
  18.         this.groupList = SWWContactDB.queryGroup(activity);//得到所有组数据  
  19.           
  20.         View view = inflater.inflate(R.layout.group_list, null);  
  21.         ListView groupListView=(ListView)view.findViewById(R.id.group_list);  
  22.         groupListView.setAdapter(new MyAdapter());  
  23.         return view;  
  24.     }  
  25.       
  26.     /** 
  27.      * 左侧联系人分组  点击回调接口 
  28.      */  
  29.     public interface GroupItemClick{  
  30.         public void itemClick(List<SWWContact> contacts);  
  31.     }  
  32.       
  33.       
  34.     private class MyAdapter extends BaseAdapter{  
  35.         private boolean isPressed[];  
  36.           
  37.         public MyAdapter(){  
  38.             if(groupList.size()>0){  
  39.                 isPressed = new boolean[groupList.size()];  
  40.                 isPressed[0]=true;  
  41.             }  
  42.         }  
  43.           
  44.         @Override  
  45.         public int getCount() {  
  46.             return groupList.size();  
  47.         }  
  48.   
  49.         @Override  
  50.         public Object getItem(int position) {  
  51.             return groupList.get(position);  
  52.         }  
  53.   
  54.         @Override  
  55.         public long getItemId(int position) {  
  56.             return groupList.get(position).getGroupId();  
  57.         }  
  58.   
  59.         @Override  
  60.         public View getView(final int position, View convertView, ViewGroup parent) {  
  61.             ViewHolder holder;  
  62.             if(null==convertView){  
  63.                 holder=new ViewHolder();  
  64.                 convertView=View.inflate(activity,R.layout.group_list_item, null);  
  65.                 holder.groupName=(TextView) convertView.findViewById(R.id.group_name);  
  66.                 convertView.setTag(holder);  
  67.             }else{  
  68.                 holder=(ViewHolder) convertView.getTag();  
  69.             }  
  70.             holder.groupName.setText(groupList.get(position).getGroupName());  
  71.               
  72.             holder.groupName.setBackgroundResource(isPressed[position]==true?R.color.light_blue:R.color.group_list);  
  73.             holder.groupName.setOnClickListener(new OnClickListener() {  
  74.                 @Override  
  75.                 public void onClick(View v) {  
  76.                     changeState(position);  
  77.                     notifyDataSetChanged();  
  78.                     if(position==0){//点击全部按钮  
  79.                         groupClick.itemClick(SWWContactDB.findAllContacts(activity.getContentResolver()));  
  80.                     }else{  
  81.                         int groupId=groupList.get(position).getGroupId();  
  82.                         groupClick.itemClick(SWWContactDB.queryGroupMember(groupId,activity));  
  83.                     }  
  84.                 }  
  85.             });  
  86.             return convertView;  
  87.         }  
  88.           
  89.         private void changeState(int position){  
  90.             isPressed=new boolean[isPressed.length];  
  91.             isPressed[position] = true;  
  92.         }  
  93.           
  94.         private  class ViewHolder{  
  95.             private TextView groupName;  
  96.         }  
  97.     }  
  98. }  

还有一些访问数据库, 以及一些工具类,我就不一一贴出来了,需要的要自己去下载源码......如果大家有什么疑问,请在下面留言.

源码下载地址  


目录
相关文章
|
6月前
|
C++
C++案例简单通讯录
C++案例简单通讯录
|
7月前
|
Android开发
Android通讯录开发之通讯录联系人搜索功能最新实现
Android通讯录开发之通讯录联系人搜索功能最新实现
|
7月前
|
C++
c++实现通讯录管理系统(控制台版)
c++实现通讯录管理系统(控制台版)
|
存储 C++ iOS开发
通讯录添加信息
通讯录添加信息
108 0
7-27 通讯录的录入与显示 (10 分)
7-27 通讯录的录入与显示 (10 分)
448 0
|
Android开发 iOS开发 Windows
方法:安卓手机如何批量添加联系人到通讯录
第I步:你得有安卓手机,再者,你到电脑上打开软件,金芝号码提取导入助手。第II步:这两个准备工作做好了以后,你打开你的Excel表格,把表格里面的铭字和号码各自复制好,分别放进软件里面的第三个功能“导入通讯录”,然后在这个功能下方点“通讯录生成”,你就可以获得一个文件,你把文件保存到电脑桌面。第III步:再通过你电脑上的溦xin或者Q,发去给你的手机溦xin或者手机Q,在手机上点开这个文件,就可以安卓手机批量添加联系人到通讯录了。
方法:安卓手机如何批量添加联系人到通讯录