联系人案例

来源:互联网 发布: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
原创粉丝点击