package com.sogouchat.ui; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import android.content.Context; import android.graphics.Color; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.sogouchat.R; import com.sogouchat.SogouChatApp; import com.sogouchat.bean.ContactNode; import com.sogouchat.bean.TelNode; import com.sogouchat.ui.NewsListAdapter.SortByDate; import com.sogouchat.ui.NewsListAdapter.ViewHolder; public class ContactListAdapter extends BaseAdapter { public final class ViewHolder{ public TextView mIcon; public TextView mName; public TextView mTel; } public ArrayList<TelNode> mData = new ArrayList<TelNode>(); private LayoutInflater mInflater; private ContactListActivity mActivity; private View mCustomItem; private SogouChatApp mApp; public int[] mAlphaIndex = new int[27]; public ContactListAdapter(Context context, SogouChatApp app){ mActivity =(ContactListActivity) context; mInflater = LayoutInflater.from(context); mApp = app; } public void setupList() { mData = new ArrayList<TelNode>(); for(int i=0;i < mApp.mTelList.size();i++){ TelNode item = mApp.mTelList.get(i); if(item.mContactId!=0){ mData.add(item); } } // sort list Collections.sort(mData, new SortByPinyin()); splitByPinyin(); for(int i = 0; i < mData.size();i++){ Log.i("list", mData.get(i).mName+"pinyin="+mData.get(i).mPinyin); } } private void splitByPinyin(){ char dChat = 0; for(int i =0; i < mData.size(); i++){ TelNode item =mData.get(i); if(item.mPinyin == null) continue; char fChar = item.mPinyin.charAt(0); if (fChar != dChat ){ if (fChar>='a'&&fChar<='z'){ mAlphaIndex[fChar-'a'] = i; dChat = fChar; TelNode separator = new TelNode(); separator.mName = String.valueOf(dChat).toUpperCase(); separator.mTel = null; mData.add(i, separator); i++; } else if (fChar>='0'&&fChar<='9') { mAlphaIndex[26] = i; dChat = fChar; TelNode separator = new TelNode(); separator.mName = String.valueOf('#'); separator.mTel = null; mData.add(i, separator); i++; } } } } public ArrayList<TelNode> getData(){ return mData; } @Override public int getCount() { // TODO Auto-generated method stub return getData().size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; TelNode item = mData.get(position); if (convertView == null) { holder = new ViewHolder(); if (item.mTel != null) { convertView = mInflater.inflate(R.layout.item_contact_list, null); } else { convertView = mInflater.inflate(R.layout.item_news_separator,null); } convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (holder == null) { holder = new ViewHolder(); } if (item.mTel != null) { if (holder.mName== null || holder.mName.getId() != R.id.contact_text_name){ convertView = mInflater.inflate(R.layout.item_contact_list, null); } holder.mIcon = (TextView) convertView.findViewById(R.id.contact_text_icon); holder.mName = (TextView) convertView.findViewById(R.id.contact_text_name); holder.mTel = (TextView) convertView.findViewById(R.id.contact_text_tel); holder.mName.setText(item.mName); holder.mIcon.setText(item.mName.substring(0, 1)); holder.mTel.setText(item.mTel); convertView.setTag(holder); } else{ convertView = mInflater.inflate(R.layout.item_news_separator,null); holder.mName = (TextView) convertView.findViewById(R.id.news_text_separator); holder.mName.setText(item.mName); } return convertView; } class SortByPinyin implements Comparator<Object> { public int compare(Object o1, Object o2) { TelNode item1 = (TelNode) o1; TelNode item2 = (TelNode) o2; if (item1.mPinyin == null){ return -1; } else if (item2.mPinyin == null){ return 1; } if (item1.mPinyin.charAt(0) > item2.mPinyin.charAt(0)) return 1; else return -1; } } public int getAlphaIndex(int alpha){ return mAlphaIndex[alpha]; } }