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