package edu.minggo.chat.adapters;
import java.util.Arrays;
import java.util.List;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.SectionIndexer;
import android.widget.TextView;
import edu.minggo.chat.R;
import edu.minggo.chat.model.User;
import edu.minggo.chat.util.PinyinComparator;
/**
* MainTabActivity�е�ͨѶ¼����Ϣ�б��������
* @author minggo
* @created 2013-1-29����12:45:39
*/
public class MainAddressAdapter extends BaseAdapter implements SectionIndexer{
public static List<User> friendlist;
public static String username[];
public Context context;
public MainAddressAdapter(Context contextParam,List<User> friendslist){
friendlist = friendslist;
context = contextParam;
initData();
}
@SuppressWarnings("unchecked")
public void initData(){
username = new String[friendlist.size()];
for(int i = 0;i<friendlist.size();i++){
username[i] = friendlist.get(i).getUsername()+"."+i;
}
Arrays.sort(username, new PinyinComparator());
}
@Override
public int getCount(){
return friendlist.size();
}
@Override
public long getItemId(int index) {
return friendlist.get(Integer.parseInt(username[index].substring(username[index].lastIndexOf(".")+1))).getUserid();//����û�ѡ���м���
}
public void refresh(){
initData();
notifyDataSetChanged();
}
//ɾ������
public void deleItem(int positon){
friendlist.remove(Integer.parseInt(username[positon].substring(username[positon].lastIndexOf(".")+1)));
initData();
notifyDataSetChanged();
}
@Override
public Object getItem(int position) {
return friendlist.get(Integer.parseInt(username[position].substring(username[position].lastIndexOf(".")+1)));
}
//����һ����̬�࣬�û���ȡ�ʹ����б���ÿһ����Ŀ���ݵĸ���
public static class ViewHolder{
ImageView ivItemPortrait; //ͷ�� ��Ĭ��ֵ
TextView tvItemName;//�dz�
TextView tvItemMotto;//����ǩ��
TextView tvCatalog;//ͷ��ĸ
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final String nickName = username[position].substring(0,username[position].lastIndexOf("."));
ViewHolder viewHolder = null;
if(convertView==null){
convertView = LayoutInflater.from(context).inflate(R.layout.main_tab_address_listitem, null);
viewHolder = new ViewHolder();
viewHolder.tvCatalog = (TextView)convertView.findViewById(R.id.contactitem_catalog);
viewHolder.ivItemPortrait = (ImageView)convertView.findViewById(R.id.head);
viewHolder.tvItemName = (TextView)convertView.findViewById(R.id.username);
viewHolder.tvItemMotto = (TextView)convertView.findViewById(R.id.motto);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
String catalog = converterToFirstSpell(nickName).substring(0, 1);
if(position==0){
viewHolder.tvCatalog.setVisibility(View.VISIBLE);
viewHolder.tvCatalog.setText(catalog);
}else{
String lastCatalog = converterToFirstSpell(username[position-1]).substring(0, 1);
if(catalog.equals(lastCatalog)){
viewHolder.tvCatalog.setVisibility(View.GONE);
}else{
viewHolder.tvCatalog.setVisibility(View.VISIBLE);
viewHolder.tvCatalog.setText(catalog);
}
}
viewHolder.ivItemPortrait.setImageResource(R.drawable.xiaohei);
viewHolder.tvItemName.setText(nickName);
viewHolder.tvItemMotto.setText(friendlist.get(Integer.parseInt(username[position].substring(username[position].lastIndexOf(".")+1))).getMotto());
return convertView;
}
@Override
public Object[] getSections() {
return null;
}
@Override
public int getPositionForSection(int section) {
for (int i = 0; i < username.length; i++) {
String l = converterToFirstSpell(username[i]).substring(0, 1);
char firstChar = l.toUpperCase().charAt(0);
if (firstChar == section) {
return i;
}
}
return -1;
}
@Override
public int getSectionForPosition(int position) {
return 0;
}
/**
* ����ת��λ����ƴ������ĸ��Ӣ���ַ�����
* @param chines ����
* @return ƴ��
*/
public static String converterToFirstSpell(String chines){
String pinyinName = "";
char[] nameChar = chines.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < nameChar.length; i++) {
if (nameChar[i] > 128) {
try {
pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}else{
pinyinName += nameChar[i];
}
}
return pinyinName;
}
}