联系人案例

简介:

项目中有用到联系人,就研究了下,参考了别人的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. }  

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

源码下载地址  


目录
相关文章
7-27 通讯录的录入与显示 (10 分)
7-27 通讯录的录入与显示 (10 分)
382 0
|
Android开发 iOS开发 Windows
方法:安卓手机如何批量添加联系人到通讯录
第I步:你得有安卓手机,再者,你到电脑上打开软件,金芝号码提取导入助手。第II步:这两个准备工作做好了以后,你打开你的Excel表格,把表格里面的铭字和号码各自复制好,分别放进软件里面的第三个功能“导入通讯录”,然后在这个功能下方点“通讯录生成”,你就可以获得一个文件,你把文件保存到电脑桌面。第III步:再通过你电脑上的溦xin或者Q,发去给你的手机溦xin或者手机Q,在手机上点开这个文件,就可以安卓手机批量添加联系人到通讯录了。
方法:安卓手机如何批量添加联系人到通讯录
解答:有没有把手机号码批量导入通讯录软件?
第(一)步:有的,你在电脑上打开软件,金芝号码提取导入助手,然后把你准备好的号码和姓铭分别复制粘贴到软件上,点下方的按键“转换成通讯录”,那么就可以在电脑上得到一个通讯录文件。 第(二)步:你再把这个文件发给你手机,在手机上打开文件,就可以实现:号码导入通讯录的软件。 第(三)步:一个简单的细节问题,怎么把电脑上的文件发送给手机,这不是什么难事啊。打开你的电脑徽xin或电脑q,把它发给你的手机徽xin或者手机q就行了,小菜一碟。
解答:有没有把手机号码批量导入通讯录软件?
方法:怎样把大量批量号码导入联系人到手机通讯录?
第一步:我们手里有一个excel表格,里面有铭字和号码,这是常见的格式,当然只有号码也可以。你把它们复制好,然后在电脑上打开软件:金芝号码提取导入助手,把刚才复制好的东西粘贴进来第二步:点它下方的按钮“转成通讯录”,你会得到一个通讯录格式的文件,然后你从电脑上把这个文件发给你的手机,在手机上打开它,就能把大量号码导入到通讯录成为联系人。第三步:怎么把文件从电脑上发给手机,这很简单啊,登录你的电脑某信或者某扣,发给你的手机某信或者某扣就ok了,很常见的方式啊。
方法:怎样把大量批量号码导入联系人到手机通讯录?
方法:在线vcf手机号码通讯录批量导入
第一步:在线的话,需要你在电脑上,打开电脑软件《金芝号码提取导入助手》,然后把你的通讯录电脑excel表格打开,把里面的姓铭和号码分别复制出来,选择软件的第三个功能“导入通讯录”,接着你把复制好的铭字粘贴进去第一个方框,把复制好的号码粘贴进去第二个方框。第二步:点软件上这个功能模块的按钮“生成通讯录”,就能在线得到一个vcf文件,你再把这个文件保存到电脑上。第三步:当然还差最后一步,就是把这个vcf文件发送给你的手机(常见的传输方式就是通过电脑嶶xin或电脑Q,直接发给你的手机嶶xin或者手机q),你在手机上打开这个vcf格式的文件,就可以一键批量在线把号码批量导入通讯录了。
方法:在线vcf手机号码通讯录批量导入
|
存储 Android开发
技巧:如何批量往手机通讯录导入联系人
想把几百个、几千个甚至上万个的联系人导入手机通讯录,如果手动去把人铭和11位号码一个个输入我的手机,数量多的话工作量太大了,这将是个耗时耗力的过程。那么我们自然会问:如何将手机号码批量导入手机通讯录?网上查了很多资料,我看到了一个简单方法,下面写个教程,操作非常简单,通过借助网上常见的便捷软件,金芝号码提取导入助手,来一键快速完成。
931 0
技巧:如何批量往手机通讯录导入联系人
方法:用什么软件可以把号码批量导入通讯录?
第1步:在电脑上打开软件,金芝号码提取导入助手,然后你把你的表格里的人铭和号码分别复制粘贴到软件上,点通讯录转换,就会得到一个文件。第2步:你从电脑上把这个文件发给你的手机,手机上打开文件,就可以完成用软件把号码批量导入通讯录。第3步:怎么发?电脑徽xin电脑Q,发给你的手机徽xin手机Q就可以了,简单的常见的发送文件方法。我操作过,就是这几个步骤。
方法:用什么软件可以把号码批量导入通讯录?
|
存储 Android开发
方法:如何批量把excel表格联系人号码导入华为手机通讯录
看着电脑上的excel表格里上千个员工,很是头大,我是华为手机,如何批量把excel表格联系人号码导入华为手机通讯录?开始的时候信心满满的想着一个个自己手打铭字和输入一个个数字,一天存几百个,几天就搞定了,但是开始存了几十个就手指都累了而且容易出错,想想这大量重复枯燥的工作量都怀疑人生。于是上网找了很多的办法,折腾了大半天,终于发现有人介绍了一个网络上常见简单便捷操作的软件工具,金芝号码提取导入助手。在电脑上安好了软件,简单操作了三步,不到三分钟,就把excel表格里面的几千个联系人快速批量存入了手机通讯录。我下面做个教程指导。
1833 0
方法:如何批量把excel表格联系人号码导入华为手机通讯录