联系人案例
来源:互联网 发布:excel数据录入技巧 编辑:程序博客网 时间:2024/05/15 23:52
项目中有用到联系人,就研究了下,参考了别人的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;@Overrideprotected 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() {@Overridepublic void onClick(View v){switch (v.getId()) {case R.id.show_group:mSlidingMenu.toggle();//动态判断自动关闭或开启SlidingMenubreak;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);}@Overridepublic 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设置adaptersortListView = (ListView) mView.findViewById(R.id.country_lvcountry);contactList=SWWContactDB.findAllContacts(activity.getContentResolver());adapter = new ContactsAdapter(activity,contactList);sortListView.setAdapter(adapter);//设置右侧触摸监听sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {@Overridepublic void onTouchingLetterChanged(String s) {//该字母首次出现的位置int position = adapter.getPositionForSection(s.charAt(0));if(position != -1){sortListView.setSelection(position);}}});return mView;}@Overridepublic 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;}}@Overridepublic int getCount() {return groupList.size();}@Overridepublic Object getItem(int position) {return groupList.get(position);}@Overridepublic long getItemId(int position) {return groupList.get(position).getGroupId();}@Overridepublic 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() {@Overridepublic 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;}}}
还有一些访问数据库, 以及一些工具类,我就不一一贴出来了,需要的要自己去下载源码......如果大家有什么疑问,请在下面留言.
源码下载地址
0 0
- 联系人案例
- 通讯录联系人,带右边索引案例
- 安卓案例-使用QuickContactBadge 关联联系人
- Android 内容提供者之读取联系人案例
- Android案例学习——新建联系人
- 案例学习BlazeDS+Spring之七InSync05新增联系人
- 案例学习BlazeDS+Spring之三InSync01查找联系人
- 案例学习BlazeDS+Spring之三InSync01查找联系人
- 案例学习BlazeDS+Spring之七InSync05新增联系人
- 发送短信之获取联系人案例(intent传递数据)
- 联系人
- 联系人
- 联系人
- 联系人
- 案例学习BlazeDS+Spring之六InSync04打开多个联系人
- 案例学习BlazeDS+Spring之六InSync04打开多个联系人
- 安卓中通过intent组件跳转到系统联系人编辑界面,及具体案例分析
- Android利用ContentReslover和动态权限获取手机联系人的案例.TXT
- 《Javascript权威指南》学习笔记之八:静态成员、静态类、枚举、重载和覆盖
- CSS学习笔记(十二) CSS命名规范
- 在 vim的状态栏显示 当前行所在的函数名字
- elasticsearch 配置 ik 分词与 jdbc 数据源
- 查看进程
- 联系人案例
- 六种方式让你的List滑动更流畅
- 各种排序的实现与复杂度分析(持续更新)
- SQL增删改查
- win7 oracle 12c 卸载
- 记一次hadoop的编译安装笔记
- 2015-1-10 记录 家里电脑整理..
- HDU 1873 -- 看病要排队 (优先队列)
- C#求水仙花数!