您的位置:首页 > 其它

联系人按照拼音首字母排序

2014-05-28 15:48 791 查看
       这几天因为项目需要,要做一个仿小米拨号UI,因为小米拨号盘界面是显示通话记录和所有联系人信息的,在测试的过程中,测试部门反馈拨号盘显示的联系人杂乱没有规律,应该按照拼音首字母排序,问题提出来了以后,我首先想到的是参照联系人界面的拼音字母排序来解决这个问题,但是没有看懂,于是想自己写一个排序的方法,首先通话记录和联系信息都存储在一个数组中, ArrayList<ContactEntity>  mTempArrayList=new ArrayList<ContactEntity>(); ContactEntity是一个存储联系人信息的类,包括电话号码,名称,名称首字母等信息,以下就是我写的对mTempArrayList里的联系人进行排序的方法:

  public ArrayList<ContactEntity>  sortContactByFirstLetter(ArrayList<ContactEntity> contactlist){

     ArrayList<ContactEntity>  newsortList =new ArrayList<ContactEntity>();

    //定义这个数组是为了标识mTempArrayList相应位置的字母所在位置

     int[] position= new int[contactlist.size()];

      for(int init=0;init<position.length;init++){

         position[init]=0;


  

    if(contactlist.size()<2){
return contactlist;

     }

    else{

       /**我规定联系人里如果名称是数字,排在最前面,它的标识符为0,a-z标识符依次为1-26  */

for(int i=0;i<contactlist.size();i++){

                       //getFirstLetter() 为ContactEntity类里的一个方法,联系人拼音全称.charAt(0)就可以得到
switch(contactlist.get(i).getFirstLetter()){
case 'a':
position[i]=1;
break;
case 'b':
position[i]=2;
break;
case 'c':
 position[i]=3;
break;
case 'd':
position[i]=4;
break;
case 'e':
 position[i]=5;
break;
case 'f':
 position[i]=6;
break;
case 'g':
 position[i]=7;
break;
case 'h':
position[i]=8;
break;
case 'i':
position[i]=9;
break;
case 'j':
position[i]=10;
break;
case 'k':
 position[i]=11;
break;
case 'l':
position[i]=12;
break;
case 'm':
position[i]=13;
break;
case 'n':
position[i]=14;
break;
case 'o':
position[i]=15;
break;
case 'p':
position[i]=16;
break;
case 'q':
        position[i]=17;
break;
case 'r':
position[i]=18;
break;
case 's':
 position[i]=19;
break;
case 't':
 position[i]=20;
break;
case 'u':
 position[i]=21;
break;
case 'v':
 position[i]=22;
break;
case 'w':
position[i]=23;
break;
case 'x':
position[i]=24;
break;
case 'y':
position[i]=25;
break;
case 'z':
 position[i]=26;
break;
 default:
  position[i]=0;
break;
}
  }
//mTempArrayList 数组里的联系人首字符的标识完了以后就可以按照从0—26的顺序一个一个往新的ArrayLlist           //添加了
  for(int j=0;j<27;j++){
  for(int a=0;a<position.length;a++){
  if(j==position[a]){
newsortList.add(contactlist.get(a));
 
}
 
 }
Log.i(TAG,"The newsortList size is "+newsortList.size());
  
 }
  return newsortList;
}

   }

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息