联系人案例

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

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

源码下载地址  

时间: 2024-08-03 16:15:02

联系人案例的相关文章

点告2.0的理念和案例分享

我们是最早基于精准营销投放无线广告的企业之一,就是在WAP网站上给不同的人展示不同的广告. 从广告主角度,不管用户手机登录到哪个站点,只要其爱好符合客户所需属性特征即可看到相关广告.从网民的角度,手机网民不管访问任何WAP网站,不管地理区域.手机型号.手机上市价格.手机卡类型等的差异,最终我们会根据该人群的需求做广告.如北京喜欢欧莱雅品牌的女士和上海喜欢逛商场的女士,在同一个广告位上看到的是我们提供的不同广告主的广告. 点告2.0的理念分享 07年我们的广告升级为点告2.0.一些是比较新的理念和

病毒营销的五大注意点及口碑营销案例

病毒营销的五大注意点 ● 提供有价值的产品或服务:对传播者而言,促成其愿意成为传播者的首要原因在于其传播内容对于传播者的价值.如果不重要,他/她凭什么帮你免费口口相传?所以在采用病毒营销之前,企业首先要对其要传播的产品和服务进行提炼和设计. ● 提供无须付出太多努力即可向他人传递信息的方式:即需要设计举手之劳就可以实现的传播方式,比如使用即时通信工具如MSN.QQ,或者发个短信.发个邮件等只要动一下手就能轻易实现,最忌讳复杂的操作. ● 信息传递范围很容易从小向很大规模扩散:即要找到容易把消息迅

交互设计案例分析:影响用户体验的关键因素

下面分享一个交互设计的小案例,这个案例很好地说明了我们在具体工作中怎么样去追求"易用"并且"轻量级"的设计,而这是影响用户体验的两个关键因素. 交互设计不是在控件库里挑选合适的控件,这是我最近工作中的一个感受.线上应用的环境复杂多变,不一而足,很多在书本或别人的实践中看起来合理的方法,放在自己具体的环境中就会出问题.下面分享一个交互设计的小案例,这个案例很好地说明了我们在具体工作中怎么样去追求"易用"并且"轻量级"的设计,而这

iOS访问通讯录开发:读取联系人信息

iOS读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值 属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图 片数据. 开发:读取联系人信息-"> 本案例是从iOS设备上读取通讯 录中的联系人,并将其显示在一个表视图中,可以进行查询,点击联系人进入详细信息画面.访问通讯录的应 用必须要做的两件事情: 1.添加AddressBook和AddressBookUI框架 为工程添加 AddressBook.fra

40个优秀的关于我们页面网页设计案例(下)

  沟通是一件重要的事情,这也使得联系我们页面的设计是整个项目中无法忽视,也无法含糊的部分.因为它不仅是要给用户一个交代,而且作为网站的自留地,对于团队自己而言,也必须给出一个"足够漂亮"的交代.设计手法,展现方式,风格走向,这些东西都是页面设计需要注意的地方,但是尤其重要的是,关于我们页面 中"我们"是最重要的元素.有的团队喜欢"官方"一点,有的喜欢个性一点,也有的团队喜欢幽默的呈现手法,也不乏一些手艺高超的设计团队在这个页面当中再炫一下技术和

40个优秀的关于我们页面网页设计案例(上)

  和网站访客进行沟通的方式有很多,但是最典型.最直接的还是通过关于我们页面来获取沟通方式.在网站设计越来越多样的今天,设计师和设计团队对于关于我们页面的设计也越来越重视,页面的每一个细节似乎都成了展示设计师个性和品牌特色的重要介质. 关于我们的页面设计并不难,但是要设计一个完美的版本并不容易.它通常取决于你的出发点,是要个性化的设计,还是品牌化的运作?是提供自己联系方式,还是获取用户的联系方式?下面的优秀案例会告诉你,优秀的关于我们页面要如何设计. 1.友好的界面 友好的联系人界面总会让人感到

15个体验舒适的联系人页面设计欣赏

  到了设计联系人页面的时候,做好用户体验设计同样重要.联系人页面是用户与网站进行沟通的另外一个重要入口,如果页面没有信息,也没有主动沟通用户,那么将很难吸引潜在用户来与网站进行联络.对于网站而言,这是极大的浪费. 接下来,通过以下的15个案例来帮你开拓设计思路.千万不要忽略联系人页面设计,它们也很重要! Cleverbirds Cleverbird的联系人页面配色非常漂亮,底部使用了明黄色的地图背景,输入框与上半部分的内容相互对应,吸引用户与网站保持联系. GCM 这家奥地利的公司在网页设计上

邮件设计案例分析

  对于美,仁者见仁智者见智,但在邮件设计中,订阅者才是最终评委.为了能够吸引订阅者在打开后继续点击.产生后续转化,我们通常会设计明显的call to action,其实尝试跳出传统产品链接的模式,比如通过投票.选择等方式也达到间接转化的目的邮件.下面我们一起来分享以下这些案例,看看在同样的设计思路下,会有怎样不同的表现. 1.投票 J. Peterman 公司的"野餐决战鸡尾酒"邮件,让订阅者为户外休闲装(野餐)或正装(鸡尾酒)投票,每种选择都对应一个定制的着陆页,投票结果会在下期邮

《Android开发案例驱动教程》

<Android开发案例驱动教程>   作者:关东升,赵志荣Java或C++程序员转变成为Android程序员 采用案例驱动模式展开讲解知识点,即介绍案例->案例涉及技术->展开知识点->总结的方式 本书作者从事多年一线开发和培训,讲解知识点力求细致,深入浅出 目    录 前言 第1章  Android操作系统概述 1 1.1  Android历史介绍 1 1.2  Android架构 1 1.3  Android平台介绍 2 1.4  现有智能手机操作系统比较 4 第2章