通訊錄中顯示分類字母的首字母是如何實現的

在手機通訊錄或者其他APPA軟件中,好友聯繫人名單經常按字母順序排列,而且按照首字母進行劃分,如果有相同首字母的值顯示該字母第一聯繫人的首字母,那麼具體該怎麼實現呢,此刻簡單介紹一下:

首先聯繫人數據一般是在一個ListView控件中呈現,配置完適配器Adapter後,在Adapter的getView()方法中,數據與屬性匹配完成後再設置是否顯示分類首字母,初始代碼如下:

/**
 * 判斷是否顯示分類首字母
 *   1.第一條數據(position=0)必須顯示
 *   2.與上一條首字母相同,則不顯示,反之則顯示
 * 
 * /
 if(position==0){
     sortKey.setVisibility(View.VISIBLE);
 }else{
     //判斷首字母
     int lastSection=contacts.get(position-1).getName().charAt(0);
     int currentSection=contact.getName().charAt(0);
     if(lastSection==currentSection){
        sortKey.setVisibility(View.GONE); 
     }else{
         sortKey.setVisibility(View.VISIBLE); 
     }
 }
 //返回組裝數據後的View對象
 return view;

上述代碼可以優化如下:

sortKey.setVisibility(View.VISIBLE);
int currentSection=contact.getName().charAt(0);
if(position!=0&&contacts.get(position-1).getName().charAt(0)==currentSection){
sortKey.setVisibility(View.GONE);
}
//返回組裝數據後的view對象
return view;

上述是按照傳統方法進行顯示,按照上述邏輯,每顯示一個條目都要將首字母從頭開始按順序找一遍,一下方法則直接定位該顯示條目的位置,在爲控件匹配完數據之後,代碼如下:
//1.根據當前position獲取應該顯示的首字母的section
int section=getSectionForPosition(position);
//2.獲取該section應該出現的位置
int pos=getPositionForSection(section);
//3.判斷當前列表項的position是否和該首字母應該出現的position相等
if(position==pos){
sortKey.setVisibility(View.VISIBLE);
}else{
sortKey.setVisibility(View.GONE);
}

return view;
}

/**
*根據首字母section獲取應該出現的位置position
*/
@Override
public int getPositionForSection(int section){
//根據Section(首字母)獲取Position(位置):即獲取某個瘦子木用該出現的位置

for(int i=0;i<contacts.size();i++){
int ch=contacts.get(i).getName().charAt(0);
if(ch==section){
return i;
}
}
return 0;
}

/**
*根據position獲取應該顯示 的首字母section
*/

@Override
public int getSectionForPosition(int position){
//根據Position(位置)獲取Section(首字母):獲取某個位置上應該顯示的首字母

return contacts.get(position).getName().charAt(0);
}

這樣每次判斷是否顯示首字母就不用從第一行開始依次比對了,直接定位到顯示的位置判斷是否顯示就行了.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章