天天看點

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

       這幾天因為項目需要,要做一個仿小米撥号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{

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;

}

   }